失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 创建oracle dblink权限不足 oracle 创建dblink

创建oracle dblink权限不足 oracle 创建dblink

时间:2021-03-10 21:48:19

相关推荐

创建oracle dblink权限不足 oracle 创建dblink

创建DBlink

database

link是定义一个数据库到另一个数据库的路径的对象,database link允许你查询远程表及执行远程程序。在任何分布式环境里,database都是必要的。另外要注意的是database link是单向的连接。

创建DBlink需要的权限:

需要CREATEDATABASELINK权限,如果是创建public

database link,必须要包含CREATEPUBLICDATABASELINK权限。同时你还需要拥有在远程数据库上面的create session的权限。

◆查询CREATEDATABASELINK权限

SQL>

select privilege,role from role_sys_privs where privilege like 'CREATE DATABASE%';

PRIVILEGE ROLE

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

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

CREATE

DATABASE LINK

IMP_FULL_DATABASE

CREATE

DATABASE LINK DBA

◆查询CREATEPUBLICDATABASELINK权限

SQL>

select privilege,role from role_sys_privs where privilege = 'CREATE

PUBLIC DATABASE LINK';

PRIVILEGE ROLE

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

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

CREATE PUBLIC DATABASE LINK IMP_FULL_DATABASE

CREATE PUBLIC DATABASE LINK DBA

◆查询create session的权限:

SQL>

select privilege from role_sys_privs where role in ('CONNECT');

PRIVILEGE

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

CREATE

SESSION

创建dblink语法:

CREATE

[SHARED][PUBLIC] database link link_name

[CONNECT TO [user][current_user] IDENTIFIED BY password]

[AUTHENTICATED BY user IDENTIFIED BY password]

[USING 'connect_string']

参数以及关键字:

SHARED:该关键字的作用是,创建后的DBlink可以被多个用户共享,该关键字必须要联合AUTHENTICATED使用。

PUBLIC:public dblink可以被所用用户共享。

当source端的数据库GLOBAL_NAME=TRUE时,link名必须与远程数据库的全局数据库名global_name)相同;否则,可以任意命名。

CONNECT TO子句:

connect to子句代表了dblink两个不同的用户类型:

1.current user

database link

2. connected

user database link

[current_user]:要求该用户必须是在远程数据库中的一个全局用户(global user)。创建一个current user database link

在远程数据库上执行一个存储对象(例如存储过程),CURRENT_USER就是这个对象所属的用户,而不是这个对象的执行用户,其相应的权限和对象所属的用户保持一致。

如果这个存储对象是包含一个invoker-rights的安全设置(具体使用AUTHID子句)。

例如:

create or replace procedure AAAA

authid current_user

is

begin

end;

这时的CURRENT_USER变成了这个对象的调用用户,而不是这个对象的所属用户,其相应的权限也和调用用户一致。

[user] IDENTIFIED BY password]。

这里的子句创建一个connected user database link。该子句使用一个固定的用户以及密码连接的远程数据库中。

[AUTHENTICATED BY user

IDENTIFIED BY password]

定义在目标实例上的一个用户,该用户被用来在远程数据库上进行鉴权。用户必须要存在远程数据库上存在。而这个用户就只是被用来做鉴权,没用其他作用。

[USING 'connect_string']

定义远程数据上的服务名。若定义了这个参数,oracle会默认追加上去数据库的domain

创建的dblink可以在all_db_links,dba_db_links,user_db_links查询到。

SQL> create public database link

dblink_p connect to current_user

2 using 'orcl';

Database link created.

SQL> select owner,DB_LINK,HOST from

dba_db_links;

OWNER

DB_LINK

HOST

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

----------

PUBLIC

DBLINK_P.REGRESS.RDBMS.DEV. orcl

创建connected user database link

SQL> create public database link dblink_f connect to YYP identified by oracle

2 using 'orcl';

Database link created.

SQL>

select owner,DB_LINK,HOST from dba_db_links;

OWNER

DB_LINK

HOST

----------

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

PUBLIC

DBLINK_F.REGRESS.RDBMS.DEV. orcl

SQL> select count(1) from

scott.emp@dblink_f;

COUNT(1)

----------

14

创建current user database link

由于需要目录服务器,试验没能完全进行。

*首先创建一个全局用户。

CREATE USER p_yyp

IDENTIFIED GLOBALLY AS

"CN=scott,OU=divisional,O=sybex,C=US"

这里需要使用enterprise directory service (Oracle Internet Directory)。

*连接到connp_yyp

*创建dblink: create public database link dblink_p connect

to current_user using 'orcl';

使用[AUTHENTICATED

BY user IDENTIFIED BY password]

该鉴权子句,必须要和shared一起使用。鉴权的意思,就是在创建,以及没一次使用这个link的时候,都会与远程数据进行鉴权。

SQL>create shared database link dblink_f2

connect to YYP identified by oracle

AUTHENTICATED BY scott IDENTIFIED BY tiger using 'orcl';

Database link created.

SQL> select owner,DB_LINK,HOST from

dba_db_links;

OWNER

DB_LINK

HOST

----------

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

PUBLIC

DBLINK_F.REGRESS.RDBMS.DEV. orcl

YYP

DBLINK_F2.REGRESS.RDBMS.DEV.US.ORACLE.CO M orcl

检验:使用DBLINK_F2,必须要在yyp这个用户下。

SQL> conn yyp/oracle

Connected.

SQL> show user

USER is "YYP"

SQL>

select count(1) from scott.emp@DBLINK_F2;

COUNT(1)

----------

14

SQL> conn scott

Enter password:

Connected.

SQL> select count(1) from

scott.emp@DBLINK_F2;

select count(1) from scott.emp@DBLINK_F2

*

ERROR at line 1:

ORA-0: connection description for

remote database not found

--à非YYP用户的时候,该DBlink就不可用,但是可以使用public

database link。

SQL> select count(1) from

scott.emp@DBLINK_F;

COUNT(1)

----------

14

如果觉得《创建oracle dblink权限不足 oracle 创建dblink》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。