Oracle技巧之授权用户访问其他用户资源

[问题描述]
客户有两套不同的系统分别由不同的供应商维护,其中有一个功能需要让供应商A访问供应商B的表与视图,但不可以实施修改动作只能够读取信息,即供应商A需要针对供应商B的数据有只读权限。

[问题分析]
在这里插入图片描述
在默认情况下,每个用户只能查询自已空间下的对象的权限,不能查询其它用户空间下的对象。

[问题步骤]

# 供应商B执行如下构建命令
select   'grant select on 供应商B.' || t.table_name  || ' to 供应商A;'  from user_tables t;

# SYSDBA执行如上构建命令

# 检查供应商A权限
select * from 供应商B.table01;

我们可以留意到供应商A访问供应商B时,它必须要通过<Schema>.<Object>访问业务。如果希望不需要<Schema>直接访问<Object>,可以通过同义词方式实现。

# 供应商B创建同义词对象
select 'create synonym '|| table_name || ' for 供应商B.' || table_name || ';' from user_tables;

# 供应商A执行如上构建命令

# 检查供应商A权限
select * from table01;

此时,方法弊端是供应商A之下无法创建同名的表对象。

如果我们需要对供应商B相关对象实施增、删、改动作,只需要将select关键字变更为insert、delete、update。

如果希望省事一些,可以通过如下方法(不推荐,外审可能不通过的)
grant select any table to 供应商A;
grant select any dictionary to 供应商A;
grant select any TRANSACTION to 供应商A;
grant select any sequence to 供应商A;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值