Как узнать, какие привилегии предоставляются схеме другого пользователя

Рассмотрим случай: в базе данных у меня есть два пользователя A и B и их соответствующая схема.

Я хочу знать, как я могу получить информацию: какие разрешения существуют для USER A на схеме B.

Рассмотрим случай: у нас есть два пользователя и связанные с ними скелеты. У нас есть пользователь A и пользователь B. В A, скажем, у нас TB1 TB2, в B, говорят, что у нас TBa, TBb. Теперь я хочу знать, как я могу найти, какие привилегии у пользователя A есть на схеме B.

Например: Пользователь A пишет: select * from B.TBb Это означает, что USER A получает доступ к таблице пользователя B так, что он имеет привилегию SELECT. Я хочу знать, что все привилегии, которые пользователь A имеет на схеме B.

Какой запрос должен быть выполнен для получения списка привилегий, которые пользователь A имеет на схеме B.

Ответ 1

Вы можете использовать эти запросы:

select * from all_tab_privs;
select * from dba_sys_privs;
select * from dba_role_privs;

Каждая из этих таблиц имеет столбец grantee, вы можете отфильтровать на нем критерии где:

where grantee = 'A'

Чтобы запрашивать привилегии для объектов (например, таблиц) в другой схеме, я предлагаю в первую очередь all_tab_privs, он также имеет столбец table_schema.

Если вы вошли в систему с тем же пользователем, чьи привилегии вы хотите запросить, вы можете использовать user_tab_privs, user_sys_privs, user_role_privs. Они могут быть запрошены обычным пользователем не-dba.

Ответ 2

Используйте пример с сообщением Szilágyi Donát.

Я использую два запроса: один, чтобы знать, какие у меня есть роли, исключая возможность подключения:

SELECT * FROM USER_ROLE_PRIVS WHERE GRANTED_ROLE != 'CONNECT'; -- Roles of the actual Oracle Schema

Знать, что мне нравится находить, какие привилегии/роли имеет моя схема/пользователь; примеры моих ролей ROLE_VIEW_PAYMENTS и ROLE_OPS_CUSTOMERS. Но для поиска таблиц/объектов определенной роли я использовал:

SELECT * FROM ALL_TAB_PRIVS WHERE GRANTEE='ROLE_OPS_CUSTOMERS'; -- Objects granted at role.

Схема владельца для этого примера может быть PRD_CUSTOMERS_OWNER (или роль/схема сама).

С уважением.

Ответ 3

Войдите в базу данных. затем выполните приведенный ниже запрос

выберите * из dba_role_privs, где grantee = 'SCHEMA_NAME';

Будет указана вся роль, предоставленная схеме.

Спасибо Szilagyi Donat за ответ. Это взято из того же и только там, где добавлено предложение.