【问题标题】:Generating a script [ORACLE]生成脚本 [ORACLE]
【发布时间】:2016-12-07 12:50:18
【问题描述】:
如何编写获取脚本的查询,将删除用户 c##test_user 的某个表中的记录的权限移除给拥有该权限的用户?
我试过这个查询:
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');
问题是我不知道如何从选择中生成脚本。有任何想法吗?。谢谢
【问题讨论】:
标签:
sql
oracle
plsql
oracle12c
【解决方案1】:
这样做
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');