【问题标题】:Escaping special characters in sqlplus转义 sqlplus 中的特殊字符
【发布时间】:2021-08-17 04:35:34
【问题描述】:

我有一个带密码的 oracle 数据库

+oS0pocWEpvaX++CN3]8nM‘2eX

如果我尝试使用它连接它

sqlplus -S -L USER/'"+oS0pocWEpvaX++CN3]8nM‘2eX"'@host @script.sql
sqlplus -S -L USER/'+oS0pocWEpvaX++CN3]8nM‘2eX'@host @script.sql
sqlplus -S -L USER/"+oS0pocWEpvaX++CN3]8nM‘2eX"@host @script.sql

它们都因错误而失败

ORA-01017: invalid username/password; logon denied

但是在 sql developer 中使用相同的密码。鉴于此密码无法更改,如何让 sqlplus 工作?

【问题讨论】:

  • 您使用的是什么操作系统?我的建议是尝试sqlplus -S -L 'USER/+oS0pocWEpvaX++CN3]8nM‘2eX@host' @script.sql
  • 使用 linux ubuntu。 ORA-01017 也失败了:用户名/密码无效;登录被拒绝。
  • 某些操作系统上的某些特殊字符在命令行中不起作用,因为它们对该特定操作系统具有特殊意义。在大多数情况下,没有解决办法。它将在 SQL Developer 中运行,因为操作系统在密码内容通过应用程序时不会对其进行解释。根据我的经验,在命令行中通用的唯一特殊字符是下划线 (_)。在您的情况下,我猜想其中一个字符被读取为行尾并且密码被截断,导致 ORA-01017 错误。
  • @pmdba 但是 echo 命令可以正常工作 echo "+oS0pocWEpvaX++CN3]8nM'2eX" +oS0pocWEpvaX++CN3]8nM'2eX 如果操作系统有一个字符问题,它不能正常工作吗?
  • 我只能说这不是保证。我建议尝试使用 Oracle Wallet 保存密码,而不是将其直接放在命令行中(这通常不是一个好主意,即使它不会引发错误)。

标签: database oracle passwords escaping sqlplus


【解决方案1】:

如果您使用的是 Linux,另一个可以尝试的方法是使用 here-doc:

sqlplus << EOHD
CONNECT USER/+oS0pocWEpvaX++CN3]8nM‘2eX@host
@script
EXIT
EOHD

【讨论】:

  • 不幸的是,这也不起作用。尝试跳过密码并在提示符下输入,但效果不佳。
【解决方案2】:

从后台以 SYS 身份登录并重置用户密码,不带任何特殊字符。

将其更改为您的脚本中没有特殊字符的首选密码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 2019-01-29
    相关资源
    最近更新 更多