关于MySQL的allowPublicKeyRetrieval参数

522 阅读1分钟

问题复现

本地好好的Java程序,打包为jar包封装成exe部署成Windows服务后却无法连接数据库。但是双击Navicat后,都不需要重启服务就连接上了。没错就是Navicat。

image.png

解决方案

在druid url配置时加上allowPublicKeyRetrieval为true即可。

datasource:
  druid:
    #&serverTimezone=GMT%2B8指定时区
    url: jdbc:mysql://***&allowPublicKeyRetrieval=true

问题排查

  1. 查看日志,发现错误Public Key Retrieval is not allowed

企业微信截图_17071038041936.png

  1. 分析错误 Public Key Retrieval is not allowed(不允许检索公钥) allowPublicKeyRetrieval=true 是针对 MySQL 8.0 的一项关键参数。MySQL 8.0 默认使用了 SHA-256 密码加密方式,而这种加密方式是基于公钥/私钥的加密,在连接数据库时需要进行公钥获取。如果不将 allowPublicKeyRetrieval 参数设置为 true,那么无法建立加密连接并获取公钥,就会出现上述错误。

但,其实还是没理解