Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Oracle公共共享数据库链接不适用于非DBA用户_Database_Oracle_Database Link - Fatal编程技术网

Database Oracle公共共享数据库链接不适用于非DBA用户

Database Oracle公共共享数据库链接不适用于非DBA用户,database,oracle,database-link,Database,Oracle,Database Link,我需要将Oracle中的数据库链接从普通公共数据库链接转换为公共共享数据库链接 我以具有DBA权限的用户身份运行以下命令,以共享链接: DROP PUBLIC DATABASE LINK "MYDBLINK"; CREATE SHARED PUBLIC DATABASE LINK "MYDBLINK" AUTHENTICATED BY SOME_USER IDENTIFIED BY thepassword USING 'OTHERDB'; 我使用的用户名和密码与数据库链接已经使用的用户名和密

我需要将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
子句中定义的凭据来完成的。一旦建立连接,远程数据库上的操作将以
连接到
子句或
当前用户
中定义的用户权限继续进行,无需使用架构验证的

在您的情况下,您没有定义
连接到
模式,因此它正在使用本地数据库中的当前用户对远程数据库进行操作。如果本地数据库上当前登录的用户在远程服务器上不存在,则会出现此错误

这是一个演示

在本地数据库上(
作为SYSDBA

然后,我通过一个存在于本地数据库中但不存在于远程数据库中的用户进行连接

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
发生错误的原因是选择操作使用了当前用户(即
JAY
)从远程数据库上的
ADDRESS
表中进行选择
JAY
user在远程数据库上不存在

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
那么,接下来呢

连接到
子句中定义用户

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;
文档
  • 试着用单引号定义由“密码”标识的
    。@BarbarosÖzhan只有在密码区分大小写时才重要,而密码不在我们的数据库中。此外,它对DBA用户也很好。