【问题标题】:Oracle database link - connect to proxy with special characters in usernameOracle 数据库链接 - 使用用户名中的特殊字符连接到代理
【发布时间】:2017-04-11 17:42:15
【问题描述】:

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

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

除了明显去掉用户名中的特殊字符之外,还有什么我可以使用的符号吗?

【问题讨论】:

  • 我会说您的最后一个命令将是要使用的命令,但看起来代理用户不支持数据库链接。有关类似问题,请参阅 stackoverflow.com/questions/32706776/…
  • 另见 MOS 注释 1477939.1,尽管这表明第二种语法应该在 11.2.0.3 中工作(确实如此);和相关的错误/功能请求 14370226;和错误 19191702,因为它在 11.2.0.4 中不再工作,即使没有特殊字符。
  • 实际上,您的第二种语法也适用于 11.2.0.3,带有特殊字符。您使用的是哪个数据库版本,如果没有特殊字符,它是否适合您?
  • 非常有趣。我正在开发 12.1.0.2。我现在测试了 11.2.0.3,实际上它可以使用和不使用特殊字符...

标签: oracle database-link


【解决方案1】:

无论有没有特殊字符,这都应该有效;这是在 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;带有或不带有错误的特殊字符:

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 或更高版本,那么您可能会遇到错误 19191702,它似乎通过数据库链接破坏了代理功能。有关详细信息,请参阅 MOS 说明 19191702.8。不过,这似乎是故意的新行为,而不是错误,而且旧行为(在此起作用的地方)被描述为不正确。

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

【讨论】:

  • 感谢您指出这一点。事实上,我早些时候在没有特殊字符的旧 Oracle 版本上进行了测试,并错误地认为这是有罪的特殊字符。
  • 该 MOS 注释暗示可以通过运行 ALTER SYSTEM SET EVENTS '19191702 level 1'; 来启用旧行为,但我无法在 Windows 12.2 上使用它。我读错了那个注释,使用了错误的语法,还是其他什么?
  • @JonHeller - 我认为这是我之前看过的,因为我不记得看过它,而且它似乎只在 12.2 中有效。虽然看起来可能存在后端端口? (它在未修补的 11.2.04 中被接受,但似乎没有做任何事情。)恐怕我没有可以试验的 12.2 实例。我认为这需要在远程端完成,但也许由于某种原因它也需要在本地完成?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 2018-11-11
  • 2015-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多