権限の問題で動的パフォーマンス・ビュー(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>