Иногда возникает задача проверить какие права имеет пакет в определенной схеме в СУБД ORACLE.
Это можно проверить легко выполнив пару SQL запросов.
Сперва стоит убедиться есть ли в наличии пакет, у которого мы хотим проверить права, это можно сделать SQL запросом:
SELECT * FROM dba_objects WHERE object_type IN ('PROCEDURE','FUNCTION','PACKAGE','PACKAGE BODY') AND owner = 'USER';
Результатом выполнения будет список пакетов, процедур и функций принадлежащих данному пользователю:
OWNER OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED LAST_DDL_TIME TIMESTAMP STATUS ----------- ------------------ ---------------- ---------- -------------- -------------- --------- ------------- ------------------- ------- USER EXT_TABLE 79689 PACKAGE 05-ИЮЛ-13 15-ЯНВ-14 2013-07-05:17:58:58 VALID USER EXT_TABLE 79690 PACKAGE BODY 05-ИЮЛ-13 05-ИЮЛ-13 2013-07-05:17:58:58 VALID
Из результата видно, что у пользователя USER есть пакет под названием EXT_TABLE и нам как раз нужно узнать какие выданы права на пакет.
Выполняем запрос:
SELECT * FROM TABLE_PRIVILEGES WHERE table_name = 'EXT_TABLE';
Результатом выполнения будет:
GRANTEE OWNER TABLE_NAME GRANTOR SELECT_PRIV INSERT_PRIV DELETE_PRIV UPDATE_PRIV REFERENCES_PRIV ALTER_PRIV INDEX_PRIV CREATED ---------- ------------ -------------- ------------ ----------- ----------- ----------- ----------- --------------- ---------- ---------- -------- PUBLIC USER EXT_TABLE USER N N N N N N N
Из результата видно, что пакету EXT_TABLE выданы права на выполнения PUBLIC (всем пользователям).