2009-08-10 1 views
6

Мне нужно выяснить, какие схемы уже получили разрешение на выполнение определенного объекта в Oracle 10g db (в данном случае пакет). Какой самый простой способ для меня сделать это? Есть ли встроенная функция для предоставления этой информации?Как проверить, какие схемы были предоставлены разрешения EXECUTE для объекта Oracle?

ответ

6
SELECT grantee 
    FROM all_tab_privs 
WHERE table_name = '<your object name>' 
    AND privilege = 'EXECUTE' 
    AND grantor = '<object owner>'; 

Да, я знаю, это говорит «table_name», но оно относится и к исполняемым объектам. Также работает таблица DBA_TAB_PRIVS. Для выбора из этих представлений и просмотра всех данных вам понадобятся соответствующие разрешения (например, роль DBA, SELECT ANY TALBE).

В ответ на комментарий Мартина ... Это самый простой способ сделать то, о чем вы просили, о котором я знаю. Если вы хотите ограничить его в пакеты, попробуйте следующее:

SELECT * FROM all_tab_privs JOIN all_objects ON (table_name = object_name) 
WHERE table_name = '<your object name>' 
    AND object_type = 'PACKAGE' 
    AND privilege = 'EXECUTE' 
    AND grantor = '<object owner>'; 
+0

Я был на самом деле после того, как либо что-то более общее, или пакет конкретном случае ... – MPritchard

+1

Все прощено! Хороший старый оракул и его бессмысленное называние системных таблиц :) – MPritchard

+0

lol, all_tab_privs - ужасное имя для этой таблицы – Reimius