嗨,我有一个问题。
Is posibble授予任何特权,但不包括相同模式的某些表。
例如:
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:无法撤消您未授予的权限。
你知道怎么做吗?我将非常感谢你的帮助。
发布于 2014-09-18 09:02:08
不,你不能。如果你给了某人SELECT ANY TABLE,你就给了他们查询数据库中任何表的能力。如果未授予对象级权限,则不能撤消对象级权限。
正确的方法几乎总是创建一个角色,该角色对用户需要访问的实际对象集具有对象级权限。将角色授予用户(以及需要一组类似权限的任何其他用户)。各种ANY角色实际上只适合像DBA这样的人。
发布于 2014-09-18 09:17:02
授予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,然后再执行。
https://stackoverflow.com/questions/25902547
复制相似问题