![](/img/trans.png)
[英]gather dba_users information in Oracle database when connected as a user
[英]Oracle public shared database link not working for non-DBA users
我需要将Oracle中的数据库链接从普通的公共数据库链接转换为公共共享数据库链接。
我以具有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
子句中定义的凭据,可以完成对远程数据库的身份AUTHENTICATED BY
。 建立连接后,将使用在CONNECT 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;
文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.