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では、プロファイルやログイントリガーを使ってユーザーごとの接続制限を柔軟に管理することが可能です。業務システムや開発環境においては、不要なアクセスやリソースの使い過ぎを防止するためにも、ユーザーごとの制御は重要な運用施策の一つとなります。
接続の集中やセキュリティ上のリスクを低減するために、プロファイル設計とログイントリガーを組み合わせた対策を検討してみましょう。