嗨,我有这个问题。
是否具有GRANT ANY权限,不包括同一模式的某些表。
例如:
EXECUTE IMMEDIATE
'CREATE USER USREJECUTA_SUI_ABAS
IDENTIFIED BY VALUES ''test''
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK';
-- 2 Roles for USREJECUTA_SUI
EXECUTE IMMEDIATE 'GRANT CONNECT TO USREJECUTA_SUI_ABAS';
EXECUTE IMMEDIATE 'GRANT RESOURCE TO USREJECUTA_SUI_ABAS';
EXECUTE IMMEDIATE 'ALTER USER USREJECUTA_SUI_ABAS DEFAULT ROLE ALL';
-- 1 System Privileges for USREJECUTA_SUI
EXECUTE IMMEDIATE 'GRANT SELECT ANY TABLE TO USREJECUTA_SUI_ABAS';
EXECUTE IMMEDIATE 'GRANT UPDATE ANY TABLE TO USREJECUTA_SUI_ABAS';
EXECUTE IMMEDIATE 'GRANT INSERT ANY TABLE TO USREJECUTA_SUI_ABAS';
EXECUTE IMMEDIATE 'GRANT UNLIMITED TABLESPACE TO USREJECUTA_SUI_ABAS';
现在撤销某些表的权限
REVOKE INSERT,UPDATE ON VELITTDA.TAPROVEEDORESXPAIS FROM USREJECUTA_SUI';
但系统启动此错误:
ORA-01927:无法拒绝您未授予的权限。
你是否知道有人会这样做?我会很乐意帮助你。
答案 0 :(得分:1)
不,你不能。如果你给某人SELECT ANY TABLE
,你就可以让他们查询数据库中的任何表。当您没有授予对象级权限时,您无法撤销对象级权限。
正确的方法几乎总是创建一个角色,该角色对用户需要访问的实际对象集具有对象级特权。将角色授予用户(以及需要类似权限集的任何其他用户)。各种ANY
角色实际上只适用于像DBA这样的人。
答案 1 :(得分:0)
授予SELECT ANY TABLE(或任何其他ANY TABLE)权限通常是错误的,并且几乎与向任意模式用户授予DBA一样糟糕。
如果您试图避免发布大量的grant语句,那么请使用从数据字典中生成DDL的简单技巧。
set head off
set pagesize 0
spool grant_foo.sql
select 'GRANT SELECT ON '||table_name||' TO FOO_ROLE;'
from all_tables where owner = 'FOO'
order by table_name
;
spool off
然后在执行之前根据需要编辑grant_foo.sql。