【问题标题】:Liquibase unable to authenticate user with @ and ! in passwordLiquibase 无法使用 @ 和 ! 对用户进行身份验证在密码中
【发布时间】:2017-04-02 20:55:37
【问题描述】:

对 PostgreSQL 9.6 使用 Liquibase 3.5.3 命令行 我无法使用密码包含 @ 和 ! 的用户(例如 postgres)进行身份验证人物。如果我更改密码以删除它们,则身份验证有效。其他用户也会出现这种情况。带有 @ 和 ! 的密码是正确的并在其他应用程序中使用。

我正在使用来自 PostgreSQL 的 jdbc 4.2 驱动程序和 java 1.8 运行时。

运行 Liquibase 时出现意外错误:org.postgresql.util.PSQLException: 致命:用户“postgres”的密码验证失败

在使用 jdbc 和 Liquibase 时,密码有什么独特之处吗?

【问题讨论】:

  • 你是只用Liquibase的时候有,还是直接用JDBC的时候也有?
  • 你是如何连接的?使用 spring liquibase 集成还是直接使用 liquibase 本身?向我们展示您的代码。
  • 这只是使用带有用户名和密码的 liquibase 命令行。没有代码也没有直接使用jdbc驱动。
  • 我想它更有可能与您的 cli 环境相关。你用的是什么操作系统和shell?

标签: postgresql authentication jdbc liquibase


【解决方案1】:

如果您使用的是命令行,为每个特殊字符添加反斜杠即可解决问题。

java -jar liquibase.jar \
  --driver=oracle.jdbc.OracleDriver \
  --classpath=\path\to\classes:jdbcdriver.jar \
  --changeLogFile=com/example/db.changelog.xml \
  --url="jdbc:oracle:thin:@localhost:1521:oracle" \
  --username=scott \
  --password=\!\@tiger\$\%\
  update

或者您可以使用 liquibase 属性文件并将所有参数放入该文件中。这样,您就可以在密码中使用原始的特殊字符了。

如果您使用 Gradle 或 Ant 等构建工具,它们的参考块将帮助您跳过此问题。

【讨论】:

  • 这可能行得通,我只需要支持!。我最终切换到不同的迁移工具,不需要在线转义命令密码。
  • @Corey Taylor,你介意告诉我你切换到什么工具吗?飞行路线?
  • 是的,我切换到 Flyway。它没有提供像 liquibase 一样的扩展格式,但它最初让我启动并运行。
  • @CoreyTaylor 我真的很喜欢 Flyway 的简单性。我也在等待更多功能切换到该功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多