微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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';

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

原文地址:https://www.jb51.cc/oracle/208011.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐