【Oracle】ユーザープロファイルの確認方法完全ガイド|DBA_PROFILES・パスワード制限・リソース制限・作成・変更

Oracle のプロファイルは、ユーザーごとに パスワードポリシー(有効期限・失敗回数・複雑さ)と リソース制限(CPU・セッション数・接続時間)を一括管理する仕組みです。本記事では、プロファイルの概念から確認 SQL・作成・変更・実務でのベストプラクティスまでを体系的に解説します。

この記事で解決できること

  • DBA_PROFILES で全プロファイルの設定を確認する方法
  • DBA_USERS で特定ユーザーのプロファイルを確認する方法
  • パスワード制限・リソース制限パラメータの意味と設定値
  • RESOURCE_LIMIT パラメータの確認・有効化
  • プロファイルの作成・変更・ユーザーへの適用
  • DEFAULT プロファイルの注意点と確認方法
スポンサーリンク

プロファイルとは

Oracle のプロファイルは、ユーザーに適用できる 設定値の集合(名前付きセット) です。DBA がプロファイルを作成してユーザーに割り当てることで、以下の2種類の制限を一元管理できます。

種別 制御できる内容 代表パラメータ
パスワード制限 パスワードの有効期限・試行回数・複雑さ・再利用制限 FAILED_LOGIN_ATTEMPTS, PASSWORD_LIFE_TIME, PASSWORD_COMPLEXITY_FUNCTION
リソース制限 CPU 使用量・セッション数・接続時間・アイドル時間・読み取りブロック数 CPU_PER_SESSION, SESSIONS_PER_USER, CONNECT_TIME, IDLE_TIME
すべてのユーザーに必ずプロファイルが割り当てられる
プロファイルを指定しないと、自動的に DEFAULT プロファイルが適用されます。DEFAULT プロファイルはすべての制限が UNLIMITED なので、本番環境では適切なプロファイルを必ず設定してください。

全プロファイルを確認する:DBA_PROFILES

すべてのプロファイルと設定値を表示

-- 全プロファイルの全設定値を表示
SELECT
  PROFILE,
  RESOURCE_NAME,
  RESOURCE_TYPE,
  LIMIT
FROM DBA_PROFILES
ORDER BY PROFILE, RESOURCE_TYPE, RESOURCE_NAME;

パスワード制限のみ抽出

-- パスワード関連パラメータのみ確認
SELECT
  PROFILE,
  RESOURCE_NAME,
  LIMIT
FROM DBA_PROFILES
WHERE RESOURCE_TYPE = 'PASSWORD'
ORDER BY PROFILE, RESOURCE_NAME;

リソース制限のみ抽出

-- リソース制限パラメータのみ確認
SELECT
  PROFILE,
  RESOURCE_NAME,
  LIMIT
FROM DBA_PROFILES
WHERE RESOURCE_TYPE = 'KERNEL'
ORDER BY PROFILE, RESOURCE_NAME;

UNLIMITED・DEFAULT 以外(実際に制限が設定されているもの)を抽出

-- 意味のある制限が設定されているパラメータだけ確認
SELECT
  PROFILE,
  RESOURCE_TYPE,
  RESOURCE_NAME,
  LIMIT
FROM DBA_PROFILES
WHERE LIMIT NOT IN ('UNLIMITED', 'DEFAULT')
ORDER BY PROFILE, RESOURCE_TYPE, RESOURCE_NAME;

ユーザーに割り当てられたプロファイルを確認する:DBA_USERS

全ユーザーのプロファイルを一覧表示

-- 全ユーザーのプロファイルとアカウント状態を確認
SELECT
  USERNAME,
  PROFILE,
  ACCOUNT_STATUS,
  LOCK_DATE,
  EXPIRY_DATE,
  CREATED
FROM DBA_USERS
ORDER BY PROFILE, USERNAME;

特定ユーザーのプロファイルを確認

-- 特定ユーザーのプロファイル名を確認
SELECT
  USERNAME,
  PROFILE,
  ACCOUNT_STATUS,
  EXPIRY_DATE
FROM DBA_USERS
WHERE USERNAME = 'SCOTT';  -- ユーザー名は大文字で指定

ユーザーとプロファイルの詳細設定を結合して確認(実務で使えるSQL)

-- ユーザーに適用されている実際の制限値を一覧表示
SELECT
  u.USERNAME,
  u.PROFILE,
  u.ACCOUNT_STATUS,
  p.RESOURCE_TYPE,
  p.RESOURCE_NAME,
  p.LIMIT
FROM DBA_USERS u
JOIN DBA_PROFILES p ON u.PROFILE = p.PROFILE
WHERE u.USERNAME = 'SCOTT'
ORDER BY p.RESOURCE_TYPE, p.RESOURCE_NAME;

特定プロファイルの詳細確認

-- 特定プロファイルの全パラメータを確認
SELECT
  RESOURCE_TYPE,
  RESOURCE_NAME,
  LIMIT
FROM DBA_PROFILES
WHERE PROFILE = 'APP_USER_PROFILE'  -- プロファイル名は大文字
ORDER BY RESOURCE_TYPE, RESOURCE_NAME;

DBA_PROFILES の主要カラムと設定値

パスワード制限パラメータ(RESOURCE_TYPE = ‘PASSWORD’)

パラメータ名 意味 推奨設定例
FAILED_LOGIN_ATTEMPTS ロックまでの失敗回数 5〜10
PASSWORD_LIFE_TIME パスワードの有効期間(日数) 90〜180
PASSWORD_REUSE_TIME 同じパスワードを再使用できるまでの日数 365
PASSWORD_REUSE_MAX 再使用できるまでに変更が必要な回数 10
PASSWORD_LOCK_TIME ロック後の自動解除までの日数(UNLIMITED = 手動解除) UNLIMITED
PASSWORD_GRACE_TIME 有効期限切れ後のログイン猶予日数 7
PASSWORD_VERIFY_FUNCTION パスワード複雑さチェック関数 ORA12C_STRONG_VERIFY_FUNCTION
INACTIVE_ACCOUNT_TIME 未使用アカウントのロックまでの日数(12c R2 以降) 30〜60

リソース制限パラメータ(RESOURCE_TYPE = ‘KERNEL’)

パラメータ名 意味 単位
SESSIONS_PER_USER ユーザーが同時に張れる最大セッション数 セッション数
CPU_PER_SESSION 1セッションが使用できる最大 CPU 時間 100 分の 1 秒
CPU_PER_CALL 1 SQL 呼び出しの最大 CPU 時間 100 分の 1 秒
CONNECT_TIME 1セッションの最大接続時間
IDLE_TIME アイドル状態で自動切断されるまでの時間
LOGICAL_READS_PER_SESSION 1セッションの最大ブロック読み取り数 ブロック数
LOGICAL_READS_PER_CALL 1 SQL 呼び出しの最大ブロック読み取り数 ブロック数
PRIVATE_SGA 共有サーバーモード時の SGA 割り当て上限 バイト
COMPOSITE_LIMIT 複合リソース制限(上記を加重合計) サービスユニット
リソース制限は RESOURCE_LIMIT パラメータを有効化しないと機能しない
プロファイルにリソース制限を設定しても、初期化パラメータ RESOURCE_LIMIT = TRUE になっていないと制限が適用されません。パスワード制限はこのパラメータに関わらず常に有効です。

RESOURCE_LIMIT パラメータの確認と有効化

-- 現在の設定を確認
SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME = 'resource_limit';

-- 有効化(動的変更可能)
ALTER SYSTEM SET RESOURCE_LIMIT = TRUE;

-- 確認
SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME = 'resource_limit';

DEFAULT プロファイルの確認

Oracle インストール直後に存在するプロファイルです。プロファイル未指定のユーザーには自動的に適用されます。

-- DEFAULT プロファイルの設定を確認
SELECT
  RESOURCE_NAME,
  RESOURCE_TYPE,
  LIMIT
FROM DBA_PROFILES
WHERE PROFILE = 'DEFAULT'
ORDER BY RESOURCE_TYPE, RESOURCE_NAME;
Oracle 12c 以降の DEFAULT プロファイルは制限あり
Oracle 12c 以降では DEFAULT プロファイルの PASSWORD_LIFE_TIME180 日 に設定されています(Oracle 11g 以前は UNLIMITED)。接続エラーが発生している場合はパスワード有効期限切れが原因の場合があります。

-- アカウントの状態を確認
SELECT USERNAME, ACCOUNT_STATUS, EXPIRY_DATE
FROM DBA_USERS
WHERE ACCOUNT_STATUS != 'OPEN';

-- パスワードの有効期限を無効化(本番環境では慎重に)
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

プロファイルの作成・変更・削除

プロファイルの作成

-- 業務システム用プロファイルの作成例
CREATE PROFILE app_user_profile LIMIT
  -- パスワード制限
  FAILED_LOGIN_ATTEMPTS    5
  PASSWORD_LIFE_TIME       180
  PASSWORD_REUSE_TIME      365
  PASSWORD_REUSE_MAX       10
  PASSWORD_LOCK_TIME       UNLIMITED
  PASSWORD_GRACE_TIME      7
  -- リソース制限
  SESSIONS_PER_USER        5
  CONNECT_TIME             480
  IDLE_TIME                60;

既存プロファイルの変更

-- パスワード有効期限を 90 日に変更
ALTER PROFILE app_user_profile LIMIT
  PASSWORD_LIFE_TIME 90;

-- 複数パラメータを同時に変更
ALTER PROFILE app_user_profile LIMIT
  FAILED_LOGIN_ATTEMPTS 3
  IDLE_TIME 30;

ユーザーへのプロファイル割り当て・変更

-- 新規ユーザー作成時にプロファイルを指定
CREATE USER appuser IDENTIFIED BY password
  PROFILE app_user_profile;

-- 既存ユーザーのプロファイルを変更
ALTER USER scott PROFILE app_user_profile;

-- 変更後に確認
SELECT USERNAME, PROFILE FROM DBA_USERS WHERE USERNAME = 'SCOTT';

プロファイルの削除

-- プロファイルを削除(ユーザーに割り当てられていない場合)
DROP PROFILE app_user_profile;

-- CASCADE: 割り当てられているユーザーを DEFAULT プロファイルに変更してから削除
DROP PROFILE app_user_profile CASCADE;

実務でよく使う SQL 集

ロックされているユーザーを一覧表示

SELECT
  USERNAME,
  ACCOUNT_STATUS,
  LOCK_DATE,
  EXPIRY_DATE,
  PROFILE
FROM DBA_USERS
WHERE ACCOUNT_STATUS != 'OPEN'
ORDER BY ACCOUNT_STATUS, USERNAME;

パスワードが近日中に期限切れになるユーザーを確認

-- 30 日以内に期限切れになるユーザーを抽出
SELECT
  u.USERNAME,
  u.PROFILE,
  u.EXPIRY_DATE,
  ROUND(u.EXPIRY_DATE - SYSDATE, 1) AS DAYS_REMAINING
FROM DBA_USERS u
WHERE u.EXPIRY_DATE IS NOT NULL
  AND u.EXPIRY_DATE <= SYSDATE + 30
  AND u.ACCOUNT_STATUS = 'OPEN'
ORDER BY u.EXPIRY_DATE;

プロファイルごとに割り当てられているユーザー数を集計

SELECT
  PROFILE,
  COUNT(*) AS USER_COUNT
FROM DBA_USERS
GROUP BY PROFILE
ORDER BY USER_COUNT DESC;

DBA・システム権限を持つユーザーのプロファイルを確認

SELECT
  u.USERNAME,
  u.PROFILE,
  u.ACCOUNT_STATUS
FROM DBA_USERS u
WHERE u.USERNAME IN (
  SELECT GRANTEE FROM DBA_SYS_PRIVS
  WHERE PRIVILEGE IN ('DBA', 'CREATE USER', 'ALTER USER', 'DROP USER')
)
ORDER BY u.USERNAME;
TEMP 表領域の過剰使用を防ぐには?
プロファイルの LOGICAL_READS_PER_SESSIONCPU_PER_SESSION で大量データを扱うクエリを制限できます。ただし TEMP 表領域の不足には別途対処が必要です。詳細は 容量不足の緊急対応完全ガイド(表領域・TEMP・UNDO) を参照してください。

よくある質問(FAQ)

Q プロファイルの確認に必要な権限は?
A

DBA_PROFILES および DBA_USERS を参照するには SELECT ANY DICTIONARY 権限か DBA ロールが必要です。権限が不足している場合は USER_PASSWORD_LIMITS(12c 以降)で自分のプロファイル設定を確認できます。

-- 自分のパスワード制限のみ確認(一般ユーザーでも可)
SELECT * FROM USER_PASSWORD_LIMITS;

-- 自分が割り当てられているプロファイル名(一般ユーザーでも可)
SELECT PROFILE FROM DBA_USERS WHERE USERNAME = USER;
-- ※ SELECT_CATALOG_ROLE または SELECT ANY DICTIONARY 権限が必要
Q LIMIT が DEFAULT と表示されている場合はどの値が適用される?
A

LIMIT が DEFAULT の場合は、DEFAULT プロファイルに設定されている値が実際に適用されます。

-- DEFAULT を参照している場合は DEFAULT プロファイルの値が適用される
SELECT RESOURCE_NAME, LIMIT
FROM DBA_PROFILES
WHERE PROFILE = 'DEFAULT'
AND RESOURCE_NAME = 'FAILED_LOGIN_ATTEMPTS';
Q アカウントがロックされた場合の解除方法は?
A

DBA が ALTER USER でアカウントを解除します。

-- アカウントのロックを解除
ALTER USER scott ACCOUNT UNLOCK;

-- 同時にパスワードも変更する場合
ALTER USER scott IDENTIFIED BY new_password ACCOUNT UNLOCK;

-- ロック解除後の状態確認
SELECT USERNAME, ACCOUNT_STATUS, LOCK_DATE FROM DBA_USERS WHERE USERNAME = 'SCOTT';
Q Oracle 12c 以降でパスワード期限切れエラーが頻発する。原因は?
A

Oracle 12c 以降の DEFAULT プロファイルは PASSWORD_LIFE_TIME = 180 がデフォルト値です。以前は UNLIMITED だったため、アップグレード後に突然エラーが発生するケースがあります。

-- 現在の PASSWORD_LIFE_TIME を確認
SELECT LIMIT FROM DBA_PROFILES
WHERE PROFILE = 'DEFAULT' AND RESOURCE_NAME = 'PASSWORD_LIFE_TIME';

-- 期限切れを一時的に解除(暫定対処)
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

-- パスワードをリセット(アカウントを OPEN 状態に戻す)
ALTER USER scott IDENTIFIED BY new_password;

-- 根本対処: 適切な期限のプロファイルを作成・適用する

接続自体ができない場合は ORA-12560: TNS プロトコル・アダプタ・エラーの解決方法 も確認してください。

Q プロファイルを変更すると既存ユーザーへの適用はいつ?
A

プロファイルの変更は 即座に 反映されます。変更後に新しいセッションが開始されたタイミングで新しい制限が適用されます。ただし既存のアクティブセッションには影響しないパラメータがほとんどです(IDLE_TIME など一部は次のチェックポイントで反映されます)。

まとめ

目的 SQL / コマンド
全プロファイル一覧 SELECT PROFILE, RESOURCE_NAME, LIMIT FROM DBA_PROFILES ORDER BY PROFILE;
特定ユーザーのプロファイル確認 SELECT PROFILE FROM DBA_USERS WHERE USERNAME = 'SCOTT';
特定プロファイルの詳細 SELECT RESOURCE_NAME, LIMIT FROM DBA_PROFILES WHERE PROFILE = 'xxx';
ロックユーザー確認 SELECT USERNAME, ACCOUNT_STATUS, EXPIRY_DATE FROM DBA_USERS WHERE ACCOUNT_STATUS != 'OPEN';
アカウントロック解除 ALTER USER scott ACCOUNT UNLOCK;
プロファイル作成 CREATE PROFILE xxx LIMIT FAILED_LOGIN_ATTEMPTS 5 ...;
ユーザーへのプロファイル変更 ALTER USER scott PROFILE xxx;
RESOURCE_LIMIT 有効化 ALTER SYSTEM SET RESOURCE_LIMIT = TRUE;

プロファイルの TEMP 表領域制限と合わせて、容量が大きいテーブルを探す方法(DBA_SEGMENTS・SQL完全ガイド) でデータ量の多いテーブルを特定しておくと、リソース制限の適切な閾値を判断しやすくなります。