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

2014-11-24 18:57:22 · 作者: · 浏览: 5

我们有这样一个需求:在数据库中建立两个用户,用户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 < SOLID_TIME


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;