在Oracle中创建新用户, 并且赋予该用户查看其他用户视图的权限

本文详细介绍了在Oracle数据库中,如何为新创建的用户设置特定视图访问权限的过程。通过具体SQL语句示例,展示了如何创建用户、赋予登录权限以及精确控制用户对指定视图和表的访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 需求提出
在HIS与第三方系统进行集成时,某第三方系统需要访问HIS数据库的视图而非全部的数据库表。

HIS的数据库为Oracle, 因此需要在Oracle中在原有用户的基础上,再增加一个用户,该用户仅能查看HIS中为其开放的视图。这也是为了系统之间的安全考虑的。

2. 解决方案
经过技术查阅,找到的解决方案如下:

(1)以system用户登录oracle数据库. 
(2)创建用户并且为用户赋予查看视图的权限. 
这里假设要创建一个tester用户,登录密码为:“123456”. 
HIS需要开放的视图是在原来用户 outpatient下的,视图名称为:v_daily_charge. 
此时,应该撰写的SQL为:

--01: 创建tester用户,并且初始密码为123456.
create user tester identified by "123456";

--02: 赋予该用户登录数据库的权限.
grant create session to tester;

--03: 赋予该用户查看outpatient下的视图v_daily_charge的权限.
grant select on outpatient.v_daily_charge to tester;

注意:在运行以上第三条SQL的时候,oracle数据库有可能会报错。 
“ORA-01720: 不存在对 emergency.t_cost表的授权选项。”

经过研究,出错的原因应该是,tester用户要访问outpatient用户的视图,该视图不仅会查阅outpatient用户下的某些表,如t_user, t_dept表,而且还访问了其他用户的表,如emergency用户下的t_cost表。

为了避免以上的错误,就需要在为tester用户赋予查看outpatient的视图权限前,先将outpatient视图中需要访问到的emergency用户下的表的权限开放给outpatient用户。

因此,在第三句SQL前还需要补充几句:


--04: 由于在outpatient用户下的视图需要访问另一个用户emergency下的表,因此需要将emergency用户下的表t_cost先授权给outpatient和tester这两个用户.

grant select on emergency.t_cost to outpatient with grant option;

如果除了赋予tester用户, 查看outpatient下视图的权限外,还想再赋予tester用户查看outpatient用户下表t_user, t_dept表的权限,则需要增加以下的SQL:

--赋予tester用户查看outpatient用户下的t_user和t_dept表的权限.

grant select on outpatient.t_user to tester;
grant select on outpatient.t_dept to tester;

————————————————
版权声明:本文为CSDN博主「inter_peng」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/inter_peng/article/details/79462153

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值