撤销任何特权Oracle

时间:2014-09-18 00:53:25

标签: oracle permissions grant any

嗨,我有这个问题。

是否具有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:无法拒绝您未授予的权限。

你是否知道有人会这样做?我会很乐意帮助你。

2 个答案:

答案 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。