需求:
1.A库要访问B业务库数据,两个库分别位于不同的服务器上。
2.只能给A用户部分表的访问权限。
方案:
1.A库通过database link的方式访问B库数据。
2.B业务库上建只读用户RESERVE_VIEW授予部分表select的权限。
A与B库只读用户RESERVE_VIEW建立db_link连接。
--1.a)业务库用户B登录,建只读用户RESERVE_VIEW
create user RESERVE_VIEW
identified by 密码
default tablespace RESERVE
temporary tablespace TEMP
profile DEFAULT;
--b)授予RESERVE_VIEW 权限
grant create session to RESERVE_VIEW;
grant create any synonym to RESERVE_VIEW;
--2.业务库用户B给RESERVE_VIEW授只读权限
grant select on PRPCITEMKINDORIGIN to RESERVE_VIEW;
grant select on PRPCFEE to RESERVE_VIEW;
--3.RESERVE_VIEW用户登录建同义词
create or replace SYNONYM PRPCITEMKINDORIGIN for B.PRPCITEMKINDORIGIN ;
create or replace SYNONYM PRPCFEE for B.PRPCFEE ;
--4.授予A用户创建db_link权限
grant create database link to RESERVE_PROD;
--5.A用户创建db_link到RESERVE_VIEW
create database link CORE_PROD connect to RESERVE_VIEW
identified by 密码
using'(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.0.1)(PORT = 1521))
)
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = prod)
)
)';
--6.A用户登录
SQL> select count(1) from PRPPFEE@core_prod;
COUNT(1)
------------------
78908898