我们项目中Oracle中Dblink的应用

1.1 简介

Dblink我们是当作了接口的一种,例如:B系统用户想访问A系统的数据,可以在利用dblink来实现。

步骤

1、A系统的数据库建立临时的表空间和相应的用户Ab,

2、A库把需要的表、视图、过程等赋权给Ab库

3、在B库建立dublik连接Ab库

4、在B库中应用

5、Ab的目的是避免,B库直接dblinkA库带来的安全问题

1.2 具体实现代码

1.2.1 创建Ab库

 

create temporary tablespace heibeiTest2   --创建临时表空间。
tempfile 'D:\oraclespace\heibeiTest2.dbf' 
size 50m  
autoextend on  
next 50m maxsize 20480m  
extent management local;  


CREATE USER heibei2 IDENTIFIED BY password  --用户名:heibei2,密码:password
 DEFAULT TABLESPACE "ZHONGYE" --A库的表空间ZHONGYE
 TEMPORARY TABLESPACE heibeiTest2  --附属表空间heibeiTest2
 QUOTA UNLIMITED ON "ZHONGYE" --附属在表空间ZHONGYE下。
 
 
GRANT "CONNECT" TO heibei2; --赋权连接权限给用户NORTHBOUND
ALTER USER heibei2 DEFAULT ROLE NONE; --修改用户绑定的默认角色NONE

GRANT CREATE SESSION TO heibei2;  --赋权创建回话权限

 

1.2.2 赋予权限

 

GRANT SELECT ON "testUser"."VIEW_testTable" TO GALEN;  --把用户testUser下的表VIEW_INCOMEREPORT的select赋权给GALEN。
GRANT SELECT ON "testUser"."VIEW_INCOMEREPORT" TO GALEN;  --把用户testUser下的表VIEW_INCOMEREPORT的select赋权给GALEN。
GRANT execute ON "testUser"."VIEW_testTable_PACKAGE" TO GALEN; --把用户testUser下的表VIEW_testTable_PACKAGE的execute赋权给GALEN。

 

1.2.3 Ab库创建中创建别称

 

--查询
select * from "testUser"."VIEW_testTable"
--创建别称
create synonym testUser_VIEW_testTable FOR "testUser"."VIEW_testTable";

 

1.2.4 创建dblink

 

--在B库下
--检查登录用是否有dblink权限,能查出数据表示有权限。
--若是表空间有多个用户,在最后加上: AND USERNAME='用户名'
select * from user_sys_privs where privilege like upper('%DATABASE LINK%');

-- 登录高权限账户例如system,给用户名为:“mccdb”用户授予创建dblink的权限
grant create public database link to mccdb;

--TESTLINK2:创建的dblink名称为:TESTLINK2
--mccdb:远程数据库用户名称
--123456:远程数据库密码123456
--HOST:host的=号后面为远程数据库ip地址
--SERVICE_NAME:SERVICE_NAME的=号后面为远程数据库服务名称
create public database link TESTLINK2 connect to mccdb identified by "123456" 
USING '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.1.59)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = xxxx)))'

 

1.2.5 在B库查询并建立别称

select * from testUser_VIEW_testTable@testlink2;
--创建别称
create synonym VIEW_testTable FOR "testUser"."VIEW_testTable";

 

1.3 这里大家就可以用了,其他sql

GRANT  update (STATUSID) ON  "testUser"."testTable" TO HEIBEI2; --把testUser.testTable的字段STATUSID的update赋给用户HEIBEI2

 1.4备注问题

1、dblink创建后访问,超时。看看你的信息填写对了吗,或者是防火墙之类的事?

2、赋权的时候表示没有表或者视图:试试吧用户名和表名大写

 

posted @ 2019-01-23 16:41  五星上酱程序员  阅读(970)  评论(0编辑  收藏  举报