DBAtlas · データベース運用アトラス

権限分析で未使用の権限を特定

Oracleセキュリティ

コマンド

-- 1) Capture privilege usage for a specific user:
BEGIN
  DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
    name        => 'CAP_APP_USER',
    description => 'Actual privilege usage of the application user',
    type        => DBMS_PRIVILEGE_CAPTURE.G_CONTEXT,
    condition   => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''CUSTOMER_APP''');
  DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE(name => 'CAP_APP_USER', run_name => 'RUN_2026_10');
END;
/
-- Other types: G_DATABASE (whole DB), G_ROLE (roles => role_name_list('DBA')), G_ROLE_AND_CONTEXT

-- 2) After a representative workload (including month end), stop and generate results:
BEGIN
  DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE(name => 'CAP_APP_USER');
  DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT(name => 'CAP_APP_USER', run_name => 'RUN_2026_10');
END;
/

-- 3) Used and never-used privileges:
SELECT username, sys_priv, obj_priv, object_owner, object_name, used_role
FROM   dba_used_privs   WHERE capture = 'CAP_APP_USER';
SELECT username, sys_priv, obj_priv, object_owner, object_name
FROM   dba_unused_privs WHERE capture = 'CAP_APP_USER';

-- 4) Through which role chain was the privilege used?
SELECT username, sys_priv, used_role, path
FROM   dba_used_sysprivs_path WHERE capture = 'CAP_APP_USER';

-- 5) Cleanup:
EXEC DBMS_PRIVILEGE_CAPTURE.DROP_CAPTURE(name => 'CAP_APP_USER');

概要

権限分析は、選択した範囲(データベース全体、ロール、条件)内で実際に使用されたシステム/オブジェクト権限を実行時に記録する。結果として未使用の権限が一覧表示され、最小権限の原則に基づいてREVOKEを計画できる。

使用する場面

DBA/ANY権限を持つアプリケーションアカウントの整理、監査前の権限レビュー、パッケージアプリケーションが本当に必要とする権限の把握に。

注意

2018年からEnterprise Editionに含まれる(以前はDatabase Vaultライセンスが必要)。追加ライセンス不要。取得中はわずかなオーバーヘッドがある。結果は取得期間中のワークロードのみを反映する。月末、年末、緊急時のジョブが実行されていなければ、「未使用」と表示された権限も必要な場合があるため、段階的に取り消す。一度に有効にできる取得は1つのみ。唯一の例外として、G_DATABASE取得は1つのロールまたはコンテキスト取得と並行して有効にできる。

DBAtlas で開く →

関連項目