【Oracle】ユーザーごとに接続制限を設定する方法|ログイン制御とアカウントロック

【Oracle】ユーザーごとに接続制限を設定する方法|ログイン制御とアカウントロック Oracle

Oracleデータベースでは、セキュリティや運用上の理由からユーザーごとに接続制限を設けることが求められるケースがあります。特定のユーザーが想定外の時間帯に接続したり、同時に複数接続されると、リソース圧迫や誤操作のリスクが高まります。

この記事では、ログイン制御やアカウントロック、プロファイル設定などを活用してユーザーごとの接続を制御する方法を解説します。

プロファイルによる接続制限の基本

Oracleでは、PROFILEを使用してユーザーに対する様々な制限を設けることができます。接続回数やパスワードの有効期限、失敗回数などを定義でき、セキュリティ強化に役立ちます。

プロファイルの作成例

CREATE PROFILE limited_user_profile LIMIT
  SESSIONS_PER_USER 1
  FAILED_LOGIN_ATTEMPTS 3
  PASSWORD_LOCK_TIME 1/24; -- 1時間ロック

この例では、1ユーザーにつき同時接続1セッションまで、ログイン失敗3回でアカウントを1時間ロックします。

ユーザーにプロファイルを割り当て

ALTER USER sample_user PROFILE limited_user_profile;

これにより、sample_userのログイン制限が有効になります。

特定の時間帯のみログインを許可する方法

特定の時間帯のみユーザーのログインを許可したい場合、ログイントリガーを使って制御する方法があります。

ログイントリガーの例

CREATE OR REPLACE TRIGGER trg_limit_login_time
AFTER LOGON ON DATABASE
BEGIN
  IF SYS_CONTEXT('USERENV', 'SESSION_USER') = 'SAMPLE_USER' THEN
    IF TO_CHAR(SYSDATE, 'HH24') NOT BETWEEN '08' AND '18' THEN
      RAISE_APPLICATION_ERROR(-20001, 'この時間帯はログインできません。');
    END IF;
  END IF;
END;
/

このトリガーでは、SAMPLE_USERのログインを8:00〜18:00の間に限定しています。

アカウントのロックと解除

アカウントを一時的に無効化したい場合は、ALTER USER文でロックできます。

-- ロックする
ALTER USER sample_user ACCOUNT LOCK;

-- ロックを解除する
ALTER USER sample_user ACCOUNT UNLOCK;

メンテナンス中のログインを防ぎたいときなどに活用できます。

ユーザーごとの接続監視・制御に役立つビュー

  • V$SESSION: 現在のセッション情報を取得
  • DBA_USERS: 各ユーザーの状態(ロック状態など)
  • DBA_PROFILES: プロファイルの詳細情報

例:同一ユーザーの同時セッション確認

SELECT username, COUNT(*) AS session_count
FROM v$session
WHERE username IS NOT NULL
GROUP BY username;

まとめ

Oracleでは、プロファイルやログイントリガーを使ってユーザーごとの接続制限を柔軟に管理することが可能です。業務システムや開発環境においては、不要なアクセスやリソースの使い過ぎを防止するためにも、ユーザーごとの制御は重要な運用施策の一つとなります。

接続の集中やセキュリティ上のリスクを低減するために、プロファイル設計とログイントリガーを組み合わせた対策を検討してみましょう。