Как найти привилегии и роли, предоставленные пользователю в Oracle?
Я использую Linux, Oracle10g.
Я создал одного пользователя, который называется test. и предоставил создать сеанс и выбрать любой словарь для одного и того же пользователя.
i также предоставил роли sysdba и sysoper тем же пользователям.
Теперь я хочу отобразить все привилегии и роли, предоставленные пользователю.
Я нашел следующий запрос, но он показывает только создание сеанса и выбор привилегий словаря.
select privilege
from dba_sys_privs
where grantee='SAMPLE'
order by 1;
пожалуйста, помогите решить проблему.
Спасибо
Ответы
Ответ 1
Посмотрите на http://docs.oracle.com/cd/B10501_01/server.920/a96521/privs.htm#15665
Проверьте таблицы USER_SYS_PRIVS, USER_TAB_PRIVS, USER_ROLE_PRIVS с этими операторами выбора
SELECT * FROM USER_SYS_PRIVS;
SELECT * FROM USER_TAB_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;
Ответ 2
В дополнение к ответу VAV, первый из них был наиболее полезным в моей среде
select * from USER_ROLE_PRIVS where USERNAME='SAMPLE';
select * from USER_TAB_PRIVS where Grantee = 'SAMPLE';
select * from USER_SYS_PRIVS where USERNAME = 'SAMPLE';
Ответ 3
Ни один из других ответов не работал у меня, поэтому я написал собственное решение:
Начиная с Oracle 11g.
Замените USER на нужное имя пользователя
Предоставленные роли:
SELECT *
FROM DBA_ROLE_PRIVS
WHERE GRANTEE = 'USER';
Привилегии, предоставляемые непосредственно пользователю:
SELECT *
FROM DBA_TAB_PRIVS
WHERE GRANTEE = 'USER';
Привилегии, предоставляемые пользователю:
SELECT *
FROM DBA_TAB_PRIVS
WHERE GRANTEE IN (SELECT granted_role
FROM DBA_ROLE_PRIVS
WHERE GRANTEE = 'USER');
Предоставленные привилегии системы:
SELECT *
FROM DBA_SYS_PRIVS
WHERE GRANTEE = 'USER';
Если вы хотите найти пользователя, с которым вы в данный момент подключены, вы можете заменить DBA в имени таблицы USER и удалить предложение WHERE.
Ответ 4
Предоставляемые привилегии IF предоставляются пользователю через некоторые роли, тогда под SQL можно использовать
select * from ROLE_ROLE_PRIVS where ROLE = 'ROLE_NAME';
select * from ROLE_TAB_PRIVS where ROLE = 'ROLE_NAME';
select * from ROLE_SYS_PRIVS where ROLE = 'ROLE_NAME';
Ответ 5
Объединяя более ранние предложения для определения ваших личных разрешений (например, разрешения USER), используйте следующее:
-- your permissions
select * from USER_ROLE_PRIVS where USERNAME= USER;
select * from USER_TAB_PRIVS where Grantee = USER;
select * from USER_SYS_PRIVS where USERNAME = USER;
-- granted role permissions
select * from ROLE_ROLE_PRIVS where ROLE IN (select granted_role from USER_ROLE_PRIVS where USERNAME= USER);
select * from ROLE_TAB_PRIVS where ROLE IN (select granted_role from USER_ROLE_PRIVS where USERNAME= USER);
select * from ROLE_SYS_PRIVS where ROLE IN (select granted_role from USER_ROLE_PRIVS where USERNAME= USER);
Ответ 6
SELECT *
FROM DBA_ROLE_PRIVS
WHERE UPPER(GRANTEE) LIKE '%XYZ%';
Ответ 7
select *
from ROLE_TAB_PRIVS
where role in (
select granted_role
from dba_role_privs
where granted_role in ('ROLE1','ROLE2')
)
Ответ 8
всегда делает SQL повторно доступным: -:)
-- ===================================================
-- &role_name will be "enter value for 'role_name'".
-- Date: 2015 NOV 11.
-- sample code: define role_name=&role_name
-- sample code: where role like '%&&role_name%'
-- ===================================================
define role_name=&role_name
select * from ROLE_ROLE_PRIVS where ROLE = '&&role_name';
select * from ROLE_SYS_PRIVS where ROLE = '&&role_name';
select role, privilege,count(*)
from ROLE_TAB_PRIVS
where ROLE = '&&role_name'
group by role, privilege
order by role, privilege asc
;