Oracle创建用户并给用户授权查询指定表或视图的

用DNINMSV31账户登录数据库进行如下操作:

CREATE USER NORTHBOUND IDENTIFIED BY NORTHBOUND
 DEFAULT TABLESPACE "TBS_DNINMSV31"
 TEMPORARY TABLESPACE "TEMP2"
 QUOTA UNLIMITED ON "TBS_DNINMSV31";

GRANT "CONNECT" TO NORTHBOUND;
ALTER USER NORTHBOUND DEFAULT ROLE NONE;

GRANT CREATE SESSION TO NORTHBOUND;

GRANT SELECT ON "DNINMSV31"."V_DNDEVICE" TO NORTHBOUND;
GRANT SELECT ON "DNINMSV31"."V_DNSUBNE" TO NORTHBOUND;
GRANT SELECT ON "DNINMSV31"."V_DNPACKAGE" TO NORTHBOUND;
GRANT SELECT ON "DNINMSV31"."V_DNPORT" TO NORTHBOUND;

【注】:在用NORTHBOUND登录后查询的时候要在视图前加上DNINMSV31,否则会报表或视图不存在。
        例如:

select * from DNINMSV31.V_DNDEVICE;    --可以正常执行

select * from DNINMSV31.TB_DEVICE where rownum<5;  --执行的时候会报表或视图不存在

创建同义词供对方公司系统访问:

CREATE SYNONYM  V_DNDEVICE FOR  DNINMSV31.V_DNDEVICE;

CREATE SYNONYM  V_DNSUBNE  FOR  DNINMSV31.V_DNSUBNE;

CREATE SYNONYM  V_DNPACKAGE  FOR  DNINMSV31.V_DNPACKAGE;

CREATE SYNONYM V_DNPORT  FOR  DNINMSV31.V_DNPORT;


第三方的系统直接通过这个同义词就可以访问到用户DNINMSV31中的视图。这也是对系统安全的一种保护措施。第三方系统登录后,只能看到其同义词,其他的都不会访问得到。

最后还要对NORTHBOUND用户进行连接数的限制,以免第三方无限制的连接数据库,造成数据库SESSION暴涨:

conn / as sysdba

alter system set resource_limite=true scope=both sid='*';

新建profile, 初始限制为1 ,用于测试。

create profile third_user limit SESSIONS_PER_USER 1 FAILED_LOGIN_ATTEMPTS unlimited;

alter user NORTHBOUND profile third_user;

将会话数调整到30

alter profile third_user limit SESSIONS_PER_USER 30;

--------------------------------------------------------------------------------------------------


跟第三方做接口程序时给对方开放只能查询某些视图用户的步骤如下:

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

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;


第四步,在数据库用户A 中,将视图查询权限授予给用户B


因为在步骤二中,加了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  run_views for  ryd_interface_src.run_views;

create synonym  INVEST_CLOCK_views for  ryd_interface_src.INVEST_CLOCK_views;

create synonym  INVEST_log_views for  ryd_interface_src.INVEST_log_views;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/906a684c100b783b2a02cab64a7a1fc5.html