【问题标题】:java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed in jhipster docker production for monolithic projectjava.sql.SQLNonTransientConnectionException:单体项目的 jhipster docker 生产中不允许公钥检索
【发布时间】:2020-05-29 05:30:31
【问题描述】:

在运行 docker up 时,我收到“java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed”。我正在使用 jhipster 整体项目。我已经尝试过“allowPublicKeyRetrieval=true”解决方案。如果我再次使用该方法我又遇到了一个错误,例如“用户'root'@'localhost'的访问被拒绝。请帮我解决这个错误。我从1周开始就遇到了同样的问题。

这是我的 .yo-rc.json

{
 "generator-jhipster": {
"promptValues": {
  "packageName": "com.niche.ng",
  "nativeLanguage": "en"
},
"jhipsterVersion": "6.5.0",
"applicationType": "monolith",
"baseName": "Nichehands",
"packageName": "com.niche.ng",
"packageFolder": "com/niche/ng",
"serverPort": "8080",
"authenticationType": "session",
"cacheProvider": "ehcache",
"enableHibernateCache": false,
"websocket": false,
"databaseType": "sql",
"devDatabaseType": "mysql",
"prodDatabaseType": "mysql",
"searchEngine": false,
"messageBroker": false,
"serviceDiscoveryType": false,
"buildTool": "maven",
"enableSwaggerCodegen": false,
"rememberMeKey": "b9f603400b9bd1cf887c6efbba0e8e3822cf735d083441758e81667adef95db8af19462970cfece6048f0be25cc",
"embeddableLaunchScript": false,
"useSass": true,
"clientPackageManager": "npm",
"clientFramework": "angularX",
"clientTheme": "none",
"clientThemeVariant": "",
"testFrameworks": [],
"jhiPrefix": "jhi",
"entitySuffix": "",
"dtoSuffix": "DTO",
"otherModules": [],
"enableTranslation": true,
"nativeLanguage": "en",
"languages": [
  "en",
  "hi",
  "ta",
  "te"
],
"blueprints": []
}
}

【问题讨论】:

  • 我将此作为评论添加,因为此错误似乎是由多种不同原因引起的,每个原因都特定于开发人员的项目。我的问题源于开发人员将用户凭据硬编码到 DatabaseConfiguration.java 类中,而不是使用从 application-dev.yml 传入的凭据。我正在尝试升级一个非常旧的 JHipster 项目,由于我继承了代码,我必须去探索。希望这会有所帮助!
  • 嘿@StackUser 你解决了问题我有同样的问题,请分享解决方案!谢谢

标签: mysql docker angular6 jhipster production


【解决方案1】:

可能的原因:

  • 您想以 root 用户身份使用 db 连接,这是一个坏主意,因为 root 可以访问所有具有所有权限的数据库表。在某些情况下,您希望将 db 中特定资源的访问权限添加到您的应用程序中。

  • 您正在为 DB 使用无密码连接

可能的解决方案:

  1. 例如在您的 db shell 中为数据库添加用户(非 root):

    CREATE USER 'apppuser'@'localhost' IDENTIFIED BY 'topsecret';

    CREATE USER 'apppuser'@'%' IDENTIFIED BY 'topsecret';

    GRANT SELECT ON dbname.* to 'apppuser'@'localhost';

    GRANT INSERT ON dbname.* to 'apppuser'@'localhost';

    GRANT UPDATE ON dbname.* to 'apppuser'@'localhost';

    GRANT DELETE ON dbname.* to 'apppuser'@'localhost';

    GRANT SELECT ON dbname.* to 'apppuser'@'%';

    GRANT INSERT ON dbname.* to 'apppuser'@'%';

    GRANT UPDATE ON dbname.* to 'apppuser'@'%';

    GRANT DELETE ON dbname.* to 'apppuser'@'%';

    然后更改您的 docker-compose 凭据

  2. 与第一个有关。在 docker-compose 文件路径中创建 .env 文件并添加属性:

    DBUSER='apppuser'

    DBPASSWORD='topsecret'

    然后在您的 docker-compose 文件中将此变量添加为 ${DBUSER} and ${DBPASSWORD}

  3. 与第二点有关。如果您在使用 .env 文件时遇到问题并且使用的是 linux 系统,请以与 .env 文件中相同的方式将您的环境属性添加到 /etc/environment 中。请记住,您不能使用带有“#”的属性,因为它将被视为注释。

请发送您的 docker-compose 文件和 production.yml 文件。

【讨论】:

    猜你喜欢
    • 2019-07-01
    • 2018-10-27
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 2021-11-30
    • 2021-09-12
    • 1970-01-01
    相关资源
    最近更新 更多