2016-12-07 8 views
1

Как написать запрос, который получает скрипт, чтобы удалить привилегию удаления записей в некоторой таблице пользователя C## test_user пользователям, у которых есть это.Создание сценария [ORACLE]

Я попробовал этот запрос:

SELECT GRANTEE, TABLE_NAME 
FROM DBA_TAB_PRIVS 
WHERE PRIVILEGE ='DELETE' 
AND TABLE_NAME IN (SELECT TABLE_NAME 
        FROM ALL_TABLES 
        WHERE OWNER = 'c##test_user'); 

Проблема заключается в том, что я не знаю, как создать скрипт из избранных. Есть идеи?. Спасибо

ответ

3

сделать это так

declare 
cursor DeleteGrants is 
SELECT GRANTEE, TABLE_NAME 
FROM DBA_TAB_PRIVS 
WHERE PRIVILEGE ='DELETE' 
AND TABLE_NAME IN (SELECT TABLE_NAME 
        FROM ALL_TABLES 
        WHERE OWNER = 'c##test_user'); 

begin 
    for aGrant in DeleteGrants loop 
     execute immediate 'REVOKE DELETE ON c##test_user.'||aGrant.TABLE_NAME||' FROM '||aGrant.GRANTEE; 
    end loop; 
end; 

В случае, если вы так же, как на выходе, но не выполнять вы также можете сделать

SELECT 'REVOKE DELETE ON c##test_user.'||TABLE_NAME||' FROM '||GRANTEE||';' as cmd 
FROM DBA_TAB_PRIVS 
WHERE PRIVILEGE ='DELETE' 
AND TABLE_NAME IN (SELECT TABLE_NAME 
        FROM ALL_TABLES 
        WHERE OWNER = 'c##test_user'); 
+0

Большое спасибо, это работает отлично. – Python241820