Как составить запрос на выборку привилегий по пользователям?
В бд Oracle есть системный юзер (SYSTEM) и допустим мой юзер my_user которому я назнчил определенные права
так вот нужно составить такой запрос который вывел бы таблицу такого вида (точки это пробело заполнитель)
+---------------------------+----------+-----------+
| Название привелегии | SYSTEM | my_user |
+---------------------------+----------+-----------+
| create table.................|..YES.......|...YES......|
+---------------------------+----------+-----------+
| create index.................|..YES......|...NO........|
+---------------------------+----------+-----------+
и т.д
То есть название привелегии первый столбец, второй YES или NO есть ли эта привелегия у юзера SYSTEM и 3-ий столбец YES или NO есть ли эта привелегия у юзера my_user
Помогите написать запрос, к каким таблицам его нужно сделать, как представить данные из них в таком виде ?
SELECT T1.PRIVILEGE,
T1.ADMIN_OPTION SYS_USER,
T2.ADMIN_OPTION MY_USER
FROM DBA_SYS_PRIVS T1
LEFT JOIN DBA_SYS_PRIVS T2 ON T1.PRIVILEGE = T2.PRIVILEGE
AND T2.GRANTEE = 'MY_USER'
WHERE T1.GRANTEE = 'SYS'
ORDER BY T1.PRIVILEGE ASC
Отлично, только много не желательных null можно не отображать строки где у юзера null ? Пробовал ставить условие где admin_option not null но видимо такой конструкции нет.
И тут же у меня возникло непонимание почему у юзера нет прав на эти действия
если я их ему давал
Отлично, только много не желательных null можно не отображать строки где у юзера null ?
сделай INNER JOIN вместо LEFT JOIN
И тут же у меня возникло непонимание почему у юзера нет прав на эти действия
Так ты права даешь роли, а не пользователю, смотри ROLE_SYS_PRIVS
ROLE_SYS_PRIVS - Системные привилегии, предоатавленные ролям.
ROLE_TAB_PRIVS - Привилегии на таблицы, предоставленные ролям.
USER_ROLE_PRIVS - Роли, доступные пользователю.
USER_TAB_PRIVS_MADE - Объектыне привилегии, которые пользователь предоставил на свои объекты.
USER_TAB_PRIVS_RECD - Объектыне привилегии, предоставленные пользователю.
USER_COL_PRIVS_MADE - объектные привилегии, которые пользователь предоставил на столбцы своих объектов.
USER_COL_PRIVS_RECD - Объектыне привилении, предоставленные пользователю на столбцы чужих объектов.
USER_SYS_PRIVS - Перечень системынх привилегий предоставленных пользователю.
Поиск всех привилегий, в том числе предоставляемых косвенно через роли:
select * from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER' order by 1,2,3;
select * from dba_sys_privs where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3;
select * from dba_tab_privs where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3,4;