2016-12-07 92 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