![](/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.