oracle

SELECT_CATALOG_ROLE データ・ディクショナリへの参照権限

権限の問題で動的パフォーマンス・ビュー(v$sessionやv$sql等)にアクセスできないとか、データ・ディクショナリ(dba_tables,dba_objects等)にアクセスできないからと、必要以上に権限を持つ「DBAロール」を付与しがちですが、「SELECT_CATALOG_ROLE」の付与をおすすめします。
このロールには、データ・ディクショナリや、動的パフォーマンス・ビューに対するSELECT権限があります。

SELECT_CATALOG_ROLEを付与するSQL
grant SELECT_CATALOG_ROLE to scott
;

注意点としてオブジェクト権限付与と異なり、ロール付与の反映は「次のログイン」以降に有効となります。既にログインしているスキーマに付与した場合、再度ログインしないと反映されません

ちなみにV_$SESSIONや、V_$SQLAREAへのselect権限を保持しているロールは以下の通りDBA_TAB_PRIVSで確認できます。

オブジェクト権限を確認するSQL
SELECT t.GRANTEE,t.OWNER,t.TABLE_NAME,t.PRIVILEGE,t.TYPE 
FROM DBA_TAB_PRIVS t
where t.TABLE_NAME in ('V_$SESSION','V_$SQLAREA')
;
-- SQL*Plusを利用する時にはこちらを使いましょう
set lin 200
col GRANTEE for a20
col OWNER for a10
col TABLE_NAME for a12
col GRANTOR for a10
col PRIVILEGE for a10
col TYPE for a10
オブジェクト権限確認例
SQL> set lin 200
SQL> col GRANTEE for a20
SQL> col OWNER for a10
SQL> col TABLE_NAME for a12
SQL> col GRANTOR for a10
SQL> col PRIVILEGE for a10
SQL> col TYPE for a10
SQL> SELECT t.GRANTEE,t.OWNER,t.TABLE_NAME,t.PRIVILEGE,t.TYPE
  2  FROM DBA_TAB_PRIVS t
  3  where t.TABLE_NAME in ('V_$SESSION','V_$SQLAREA')
  4  ;

GRANTEE              OWNER      TABLE_NAME   PRIVILEGE  TYPE
-------------------- ---------- ------------ ---------- ----------
SELECT_CATALOG_ROLE  SYS        V_$SESSION   SELECT     VIEW
SELECT_CATALOG_ROLE  SYS        V_$SQLAREA   SELECT     VIEW
GSMADMIN_INTERNAL    SYS        V_$SESSION   SELECT     VIEW
ORACLE_OCM           SYS        V_$SESSION   SELECT     VIEW
APPQOSSYS            SYS        V_$SESSION   SELECT     VIEW
CTXSYS               SYS        V_$SESSION   SELECT     VIEW
DVSYS                SYS        V_$SESSION   SELECT     VIEW
LBACSYS              SYS        V_$SESSION   SELECT     VIEW
DV_SECANALYST        SYS        V_$SESSION   SELECT     VIEW

9行が選択されました。

SQL>

SELECT_CATALOG_ROLEを付与すればAUTOTRACEも利用できるようになります

スポンサーリンク
コピペで使う