コメント |
まず、[[SELECT ANY DICTIONARY]] システム権限が必要なので、
以下の SQL であるかどうか確かめます
@DIV
select PRIVILEGE
from USER_SYS_PRIVS
union
select PRIVILEGE
from ROLE_SYS_PRIVS
order by PRIVILEGE
@END
もし無かったら、SQLPlus で、SYS でログインするか、ローカルで以下のようにします
@DIV
sqlplus / as sysdba
@END
※ 実行している Windows ユーザが @C:red(ORA_DBA グループ)に所属している必要があります
http://lightbox.on.coocan.jp/image/ORA_DBA.png
そして、grant で [[SELECT ANY DICTIONARY]] 権限を付与します
@DIV
grant
SELECT ANY DICTIONARY
to ORACLEのユーザ
@END
そして以下の SQL を実行すると、実行権限の無いパッケージの一覧を取得できます
@DIV
select distinct
DBA_TAB_PRIVS.OWNER,
DBA_TAB_PRIVS.TABLE_NAME
from
DBA_TAB_PRIVS
left outer join ALL_TAB_PRIVS
on
DBA_TAB_PRIVS.TABLE_NAME = ALL_TAB_PRIVS.TABLE_NAME
left outer join DBA_OBJECTS
on
DBA_TAB_PRIVS.OWNER = DBA_OBJECTS.OWNER
and DBA_TAB_PRIVS.TABLE_NAME = DBA_OBJECTS.OBJECT_NAME
where
DBA_TAB_PRIVS.PRIVILEGE = 'EXECUTE'
and ALL_TAB_PRIVS.TABLE_NAME is NULL
and DBA_OBJECTS.OBJECT_TYPE = 'PACKAGE'
order by DBA_TAB_PRIVS.TABLE_NAME
@END
そして、使用可能にするには、再び grant で権限を付与します。
( 以下は実際の例です )
@DIV
grant execute on @C:red(sys.utl_file) to lightbox;
@END
また、実行できるオブジェクトの一覧は以下で取得して下さい
@DIV
select * from ALL_TAB_PRIVS where PRIVILEGE = 'EXECUTE'
@END
|