Выяснить какие права у процедуры в Oracle

Иногда возникает задача проверить какие права имеет пакет в определенной схеме в СУБД 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 (всем пользователям).

Оставьте комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.