Oracle Public共享数据库链接不适合非DBA用户



我需要将我在Oracle中的数据库链接从普通的公共数据库链接转换为public 共享数据库链接。

我在我的用户具有DBA特权以使链接共享时进行了以下操作:

DROP PUBLIC DATABASE LINK "MYDBLINK";
CREATE SHARED PUBLIC DATABASE LINK "MYDBLINK"
AUTHENTICATED BY SOME_USER
IDENTIFIED BY thepassword
USING 'OTHERDB';

我使用了与数据库链接相同的用户名和密码。

当我与具有DBA特权的用户跨数据库链接查询时,它可以正常工作。但是,当我使用非DBA特权用户并检查数据库链接时,它表明数据库链接的用户名是null,如果我尝试在链接上查询,我会得到:

ORA-01017:无效的用户名/密码;登录被拒绝

有什么想法为什么链接对非DBA用户的行为会有所不同?

对远程数据库的身份验证是通过使用AUTHENTICATED BY子句中定义的凭据来完成的。建立连接后,在远程数据库上操作以CONNECT TO子句或CURRENT USER定义的用户的特权进行操作,否AUTHENTICATED BY架构。

在您的情况下,您尚未定义CONNECT TO架构,因此它使用本地数据库中的当前用户在远程数据库上操作。如果您当前在本地数据库上登录的用户在远程服务器上不存在,则您会收到此错误。

这是 demo

在本地数据库(AS SYSDBA)上

SQL> CREATE SHARED PUBLIC DATABASE LINK link2remotedb
AUTHENTICATED BY userA_uat IDENTIFIED BY userA_uat
USING 'ORCLUAT';  
Database link created.

然后,我由本地数据库中但不在远程数据库上的用户连接。

SQL> conn jay/jay
Connected.
SQL> select * from address@link2remotedb;
select * from address@link2remotedb
                      *
ERROR at line 1:
ORA-01017: invalid username/password; logon denied
ORA-02063: preceding line from LINK2REMOTEDB

发生了错误,因为选择操作使用了当前用户,即从远程数据库上的ADDRESS表中选择的JAYJAY用户在远程数据库上不存在。

那么,接下来是什么?

CONNECT TO子句中定义用户

SQL> CREATE SHARED PUBLIC DATABASE LINK link2remotedb
CONNECT TO userA_uat IDENTIFIED BY userA_uat
AUTHENTICATED BY userA_uat IDENTIFIED BY userA_uat
USING 'ORCLUAT'; 
Database link created.
SQL> conn jay/jay
Connected.
SQL> select * from address@link2remotedb;

文档

  • 使用共享数据库链接
  • 相关内容

    • 没有找到相关文章

    最新更新