Разница между запросом привилегий в таблицах - PullRequest
1 голос
/ 10 ноября 2011

Чтение это ответ r Я нашел запрос, чтобы найти привилегии таблицы:

SELECT * FROM ALL_TAB_PRIVS WHERE TABLE_NAME = 'MY_TABLE'

Но друг дал мне этот запрос:

select a.USERNAME,a.GRANTED_ROLE,b.ROLE,b.owner,b.TABLE_NAME,b.privilege
from user_role_privs a,role_tab_privs b
where b.ROLE=a.GRANTED_ROLE and b.TABLE_NAME = 'MY_TABLE';

Есть ли существенная разница между каждым запросом?

1 Ответ

2 голосов
/ 10 ноября 2011

Они совершенно разные, да.

В Oracle привилегии для таблицы могут предоставляться либо непосредственно пользователю (в этом случае они будут отображаться в ALL_TAB_PRIVS), либо привилегии могут предоставлятьсяроль (отображается в ROLE_TAB_PRIVS), и эта роль может быть предоставлена ​​пользователю (отображается в USER_ROLE_PRIVS).Первый запрос покажет вам пользователей, которые имеют прямые привилегии на столе.Второй запрос покажет вам пользователей, которым была предоставлена ​​роль, которой предоставлен доступ к таблице (обратите внимание, что в обоих случаях вам действительно следует указать OWNER в дополнение к имени таблицы).Ни один из них не покажет вам информацию о грантах, которые были получены с помощью нескольких вложенных уровней ролей (т. Е. Пользователю A предоставлена ​​роль 1, роли 1 предоставлена ​​роль 2, роли 2 предоставлен доступ к таблице).Гранты, полученные с помощью ролей, также могут быть немного сложными, поскольку в сеансе можно включать и отключать роли по умолчанию и роли по умолчанию, а роли и роли, защищенные паролем, можно включать и отключать.

В общем, я бы посоветовал взглянуть на сценарии, доступные на сайте Пита Финнигана , если вы хотите иметь что-то, что охватывало бы все возможные случаи.В этом случае вы, вероятно, захотите использовать его скрипт who_can_access , чтобы определить, какие пользователи могут получить доступ к конкретной таблице.

...