跟第三方做接口程序时给对方开放只能查询某些视图用户的步骤如下:
我们有这样一个需求:在数据库中建立两个用户,用户A
这个用户B
这种需求在很多行业的应用中都很常见。假如这是一道面试题,您该如何去回答呢?
我采用下面的方法来回答这个问题。
第一步,创建新用户A
这里用户名称分别为ryd_interface_src
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
conn qlzqclient/qlzq+client8
grant select on INVEST_CLOCK
grant select on INVEST_LOG
这里授权方法加了一个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 >
and sysdate < SOLID_TIME
union
select a.doc_id,a.title,a.upload_date,a.branch_code
left
where
a.state =1 and a.is_delete =0
and
and
create or replace view INVEST_CLOCK_VIEWS as
select
create or replace view INVEST_LOG_VIEWS as
select
第四步,在数据库用户A
因为在步骤二中,加了with grant option
grant select on INVEST_CLOCK_views to ryd_interface;
grant select on INVEST_LOG_views to ryd_interface;
grant select on run_views to ryd_interface;
第五步,在数据库用户B
conn ryd_interface/ryd_interface
select count(*) from ryd_interface_src.run_views;
select count(*) from ryd_interface_src.INVEST_CLOCK_views;
select count(*) from ryd_interface_src.INVEST_LOG_views;
create synonym
create synonym
create synonym
第三方的系统直接通过这个同义词就可以访问到用户A
第六步,限制资源使用
因为用户B
话数做一个限制。
这里采用profile
conn / as sysdba
alter system set resource_limite=true scope=both sid='*';
新建profile,
create profile third_user limit SESSIONS_PER_USER 1 FAILED_LOGIN_ATTEMPTS unlimited;
alter user ryd_interface profile third_user;
将会话数调整到30
alter profile third_user limit SESSIONS_PER_USER 30;
通过以上操作,我们就可以实现这个需求了。