我们正在合理化我们的数据库用户权限,为此,我们希望撤销授予所有用户(但不是特定角色)的架构中所有表的所有选择权限。
通过一些正则表达式,我尝试创建一个通用的revoke
对于每个表,给出如下内容:
撤销 USER1,USER2,USER3... 对 TABLE1 的选择;
撤销 USER1,USER2,USER3... 对 TABLE2 的选择;
然而,由于并非所有用户都被授予对所有表的权限,这会导致 oracle 错误:
01927. 00000 - "cannot REVOKE privileges you did not grant"
这是有道理的,但没有帮助。
我也尝试过使用All_Tab_Privs
获取所有具有要撤销的必要授权的表的列表,这可行,但我不知道如何轻松地从中获取实际撤销权限。
SELECT * From All_Tab_Privs where grantor = 'GRANTING_USER' and grantee != 'READROLE' and grantee != 'PUBLIC' and grantee != 'SYS';
对于如何在不花几个小时在电子表格上完成此操作的情况下,有什么建议吗?我猜有一些 PL/SQL?谢谢。
此类作业的一般模式是使用隐式游标返回所需的数据,然后构建 DDL 并执行它们。
begin
for x in (select attribute_1, attribute_2 ... from ... where ...)
loop
execute immediate 'REVOKE ...'||x.attribute1||' etc';
end loop;
end;
/
一个不错的替代方法是构建要在 SELECT 中执行的 SQL,然后执行它。它更容易测试,但 SQL 看起来有点笨拙。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)