Oracle数据库链接-使用用户名中的特殊字符连接到代理

Oracle数据库链接-使用用户名中的特殊字符连接到代理,oracle,database-link,Oracle,Database Link,通过名称包含特殊字符的另一个用户授予用户代理连接权限: CREATE USER "A-USER" IDENTIFIED BY "a"; CREATE USER foo IDENTIFIED BY "random-trash"; ALTER USER foo GRANT CONNECT THROUGH "A-USER"; 现在,我正在努力创建指向以下内容的数据库链接: CREATE PUBLIC DATABASE LINK dbl CONNECT TO A-USER[FOO] IDENTIFIE

通过名称包含特殊字符的另一个用户授予用户代理连接权限:

CREATE USER "A-USER" IDENTIFIED BY "a";
CREATE USER foo IDENTIFIED BY "random-trash";
ALTER USER foo GRANT CONNECT THROUGH "A-USER";
现在,我正在努力创建指向以下内容的数据库链接:

CREATE PUBLIC DATABASE LINK dbl CONNECT TO A-USER[FOO] IDENTIFIED BY "a";
-- ... but it complains about '-'

CREATE PUBLIC DATABASE LINK dbl CONNECT TO "A-USER[FOO]" IDENTIFIED BY "a";
-- ... but it treats whole "A-USER[FOO]" as a username

CREATE PUBLIC DATABASE LINK dbl CONNECT TO "A-USER"[FOO] IDENTIFIED BY "a";
-- ... but it expects IDENTIFIED right after closing quote

除了明显地去除用户名中的特殊字符外,我还可以使用任何符号吗?

无论是否使用特殊字符,这都应该有效;这在11.2.0.3中,首先没有:

CREATE USER "AUSER" IDENTIFIED BY "a";
CREATE USER bar IDENTIFIED BY "random-trash";
ALTER USER bar GRANT CONNECT THROUGH "AUSER";
GRANT CREATE SESSION TO "AUSER";
GRANT CREATE SESSION TO "BAR";

CREATE PUBLIC DATABASE LINK dbl CONNECT TO "AUSER[BAR]" IDENTIFIED BY "a" using 'MYDB';
SELECT * FROM dual@dbl;

D
-
X
以及:

CREATE USER "A-USER" IDENTIFIED BY "a";
CREATE USER foo IDENTIFIED BY "random-trash";
ALTER USER foo GRANT CONNECT THROUGH "A-USER";
GRANT CREATE SESSION TO "A-USER";
GRANT CREATE SESSION TO "FOO";

DROP PUBLIC DATABASE LINK dbl;
CREATE PUBLIC DATABASE LINK dbl CONNECT TO "A-USER[FOO]" IDENTIFIED BY "a" using 'MYDB';
SELECT * FROM dual@dbl;

D
-
X
在11.2.0.4中两者均不起作用;带或不带特殊字符的it错误:

select * from dual@dbl
                   *
ERROR at line 1:
ORA-01017: invalid username/password; logon denied
ORA-02063: preceding line from DBL
如果您使用的是11.2.0.4或更高版本,那么可能会遇到bug 19191702,它似乎通过数据库链接破坏了代理功能。更多信息请参见MOS注释19191702.8。这似乎是有意的新行为,而不是一个bug,而旧的行为——这起作用的地方——被描述为不正确


可能有一个补丁可用于允许设置特定事件以恢复该行为(据说在12.2中可用),但作为“允许依赖于[旧]错误行为的现有应用程序继续工作的临时解决方案”。如果您的平台和版本没有补丁,或者事件没有帮助,那么您需要提出服务请求;当然,这可能值得一提。

我想说您的最后一个命令就是要使用的命令,但看起来数据库链接不支持代理用户。类似问题请参见。另请参见MOS注释1477939.1,尽管这表明第二种语法应该在11.2.0.3中使用(事实上是这样);和相关缺陷/特征请求14370226;错误19191702,因为它在11.2.0.4中不再工作,即使没有特殊字符。实际上,您的第二个语法在11.2.0.3中也可以使用特殊字符。您使用的是哪一个DB版本?它是否适合您而不需要特殊字符?非常有趣。我正在研究12.1.0.2。我现在测试了11.2.0.3,事实上它可以与特殊字符一起工作,也可以不与特殊字符一起工作……感谢您指出这一点。事实上,我之前在没有特殊字符的旧Oracle版本上做了一个测试,并错误地认为是特殊字符造成了错误。MOS注释暗示旧行为可以通过运行
ALTER SYSTEM SET EVENTS“19191702 level 1”来启用但我无法让它在Windows 12.2上为我工作。我是读错了笔记,使用了错误的语法,还是其他什么?@JonHeller-我想这是在我之前看过它之后添加的,因为我不记得看到过它,而且它似乎只在12.2中有效。虽然看起来可能存在后台端口?(它在未修补的11.2.04中被接受,但似乎没有任何作用。)我恐怕没有12.2实例可以进行实验。我认为这需要在远程端完成,但出于某种原因,可能也需要在本地完成?