今天在论坛里看到一个帖子,关于如何将一个用户下所有表的查询权限赋给另一个用户,具体需求是这样的:有3个普通权限的用户,要求用户2只能查询用户1下的表而不能去查询用户3所创建的表。
针对这个问题,只要将用户1下所有表的查询权限赋给用户2即可。但是,用户1下可能有很多表,如果一条一条地写grant语句很不现实,这里介绍一种便捷的方法:通过查询语句得到grant赋权限脚本,执行一下就可以了。
SQL> show user
USER 为"SYS"
SQL> create user tt
2 identified by tt;
用户已创建
SQL> grant create session to tt;
授权成功。
SQL> select 'grant select on '||owner||'.'||object_name|| ' to user1;'
2 from dba_objects
3 where object_type='TABLE' and wner='SCOTT';
'GRANTSELECTON'||OWNER||'.'||OBJECT_NAME||'TOUSER1;'
------------------------------------------------------------------------------
grant select on SCOTT.BONUS to user1;
grant select on SCOTT.CC to user1;
grant select on SCOTT.CC1 to user1;
grant select on SCOTT.DEPT to user1;
grant select on SCOTT.EMP to user1;
grant select on SCOTT.SALGRADE to user1;
grant select on SCOTT.T1 to user1;
grant select on SCOTT.T2 to user1;
grant select on SCOTT.TT to user1;
已选择9行。
复制上面的查询结果执行一下就可以了。如果查询结果太多的话,可以将这样做:
set pages 999;
set heading off;
spool run_grant.sql
select 'grant select on '||owner||'.'||object_name|| ' to user1;'
from dba_objects
where object_type='TABLE' and wner='SCOTT';
spool off;
@run_grant
这是一种很方便高效的方法,可以使工作事半功倍。
把所有表的查询权限赋给另一个用户
grant select any table to QUERY;