gpt4 book ai didi

sql - 一次撤销多个用户的 Oracle 权限

转载 作者:行者123 更新时间:2023-12-04 22:23:21 27 4
gpt4 key购买 nike

我们正在合理化我们的数据库用户权限,为此我们希望撤销授予所有用户(但不是特定角色)的架构中所有表的所有选择权限。
使用一些正则表达式,我尝试为每个表创建一个通用的 revoke,给出如下内容:

revoke select on TABLE1 from USER1,USER2,USER3...;

revoke select on TABLE2 from USER1,USER2,USER3...;


然而,由于并非所有用户都被授予对所有表的权限,这会导致 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 看起来有点笨重。

关于sql - 一次撤销多个用户的 Oracle 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10551291/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com