对远程数据库的身份验证是通过使用 onAUTHENTICATED BY
子句定义的凭证来完成的。建立连接后,远程数据库上的操作将使用用户定义的 onCONNECT TO
子句的权限进行,或者CURRENT USER
没有AUTHENTICATED BY
模式。
在您的情况下,您尚未定义CONNECT TO
架构,因此它使用本地数据库中的当前用户对远程数据库进行操作。如果远程服务器上不存在您当前在本地数据库上登录的用户,那么您会收到此错误。
这是一个演示。
在本地数据库上( 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
发生错误是因为 SELECT 操作使用了当前用户,该用户将从远程数据库上JAY
的表中进行选择。远程数据库上不存在用户。ADDRESS
JAY
那么,接下来呢?
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;
文档
使用共享数据库链接