我们正在合理化我们的数据库用户权限,为此我们希望撤销授予所有用户(但不是特定角色)的架构中所有表的所有选择权限。
使用一些正则表达式,我尝试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?谢谢。