oracle 把A用户所有表的查看权限赋给B用户(批量赋权)

ALL_OBJECTS      describes all objects accessible to the current user.     描述当前用户有 访问权限 的所有对象 
DBA_OBJECTS     describes all objects in the database.                           描述了数据库中的所有对象 
USER_OBJECTS    describes all objects owned by the current user.         描述了当前用户所拥有的所有对象

千万不要觉得all_*和dba_*视图都是所有对象的意思,  all_*和权限有关
所以出现【不同用户访问all_objects视图,相同过滤条件,结果不同 (例如:"A用户访问all_objects视图过滤B.T1表有数据,而C用户也访问all_objects视图过滤B.T1表却没有数据" )】是正常的,是因为C用户没有访问B.T1表权限,用dba_objects可以解决;
所以 适当的选择 dba_*和all_*视图。


大概有三中办法:

1:grant select any table to B;(此种方法控制不太精确,sys、system等一些表也能查看)

2:grant select on A.tableName1 to public;grant select on A.tableName2 to public;.....................(有多少个表执行多少次),此方法比较麻烦

3:隐式游标赋权:

select 'GRANT SELECT ON A.'||object_name||' to B;' from dba_objects where owner='A' and object_type='TABLE';

一般采用第三种方法,权限控制比较精细。


  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值