ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文

  メンテナンス 前画面に戻る

対象スレッド 件名: ユーザが使用できないパッケージの一覧を取得
名前: lightbox
処理選択
パスワード

件名 ユーザが使用できないパッケージの一覧を取得
名前 lightbox
コメント
まず、[[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