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