Скрипты для работы с правами в Oracle DB.
Как посмотреть список объектов на которые у пользователя есть права?
select * from dba_sys_privs where GRANTEE='USER';
Сравнить права на объекты БД двух пользователей. Скрипт ниже выводит права, которые есть у первого пользователя, но нет у второго
SELECT USER1.*, USER2.* FROM (select * from DBA_TAB_PRIVS where GRANTEE='USER1') USER1 on USER1.table_name = USER2.table_name WHERE USER2.table_name is null;
Выдаем права
GRANT SELECT,UPDATE,INSERT,DELETE ON <СХЕМА>.<ОБЪЕКТ> TO <ПОЛЬЗОВАТЕЛЬ>; GRANT EXECUTE ON <СХЕМА>.<ОБЪЕКТ> TO <ПОЛЬЗОВАТЕЛЬ>;
Забираем права
REVOKE SELECT,UPDATE,INSERT,DELETE ON <СХЕМА>.<ОБЪЕКТ> TO <ПОЛЬЗОВАТЕЛЬ>; REVOKE EXECUTE ON <СХЕМА>.<ОБЪЕКТ> FROM <ПОЛЬЗОВАТЕЛЬ>;
Генерация скриптов на раздачу прав
SELECT 'GRANT ' || T.PRIVILEGE || ' ON ' || T.TABLE_NAME || ' TO ' || t.GRANTEE || ' ;' #b1b100;">AS grn FROM DBA_TAB_PRIVS t WHERE t.GRANTEE='USER1' AND t.OWNER = 'USER2' AND NOT T.TABLE_NAME LIKE '%$%';