如何实现Oracle中用户B只能访问用户A的视图

原创
2016-06-07 17:14:09 872浏览

如何实现Oracle中用户B只能访问用户A的视图,在数据库中建立两个用户,用户A 用于创建一些视图,直接访问自己数据库中一个模式下

我们有这样一个需求:在数据库中建立两个用户,用户A 用于创建一些视图,直接访问自己数据库中一个模式下的表,以及通过数据库链路访问其他数据库中的表;另一个用户B 能访问到这个用户A 中的视图,,并且只能访问视图,且访问连接数有限制。

这个用户B 是用来给其他系统访问的,因此对权限和资源使用都需要有限制条件。

这种需求在很多行业的应用中都很常见。假如这是一道面试题,您该如何去回答呢?

我采用下面的方法来回答这个问题。

第一步,创建新用户A 和B 。

这里用户名称分别为ryd_interface_src 和ryd_interface ,对这两个用户都授予非常有限的权限。

drop user ryd_interface_src cascade;

create user ryd_interface_src identified by ryd_interface_src;

grant connect,create view to ryd_interface_src;

drop user ryd_interface cascade;

create user ryd_interface identified by ryd_interface;

grant connect,create synonym to ryd_interface;

第二步,登录数据库一个模式中,授权给用户A ,使得用户A 能创建视图

conn qlzqclient/qlzqclient

grant select on INVEST_CLOCK to ryd_interface_src with grant option;

grant select on INVEST_LOG to ryd_interface_src with grant option;

这里授权方法加了一个with grant option ,请注意。

第三步,登录数据库用户A 中,创建视图

conn ryd_interface_src/ryd_interface_src

create or replace view run_views as

select id as doc_id, title,fbsj as upload_date,'' as branch_code from qlzq.runs_lantern@CLIENT_QLZQWEB

where EXT1='1' and sysdate > START_TIME

and sysdate

union

select a.doc_id,a.title,a.upload_date,a.branch_code from qlzq.cms_doc_single_attr@CLIENT_QLZQWEB a

left join qlzq.cms_doc_category_map@CLIENT_QLZQWEB b on a.doc_id=b.doc_id

where

a.state =1 and a.is_delete =0

and a.upload_date> sysdate-90

and b.cat_id=4;

create or replace view INVEST_CLOCK_VIEWS as

select * from qlzqclient.INVEST_CLOCK;

create or replace view INVEST_LOG_VIEWS as

select * from qlzqclient.INVEST_LOG;

linux

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。