开发者社区> 问答> 正文

使用SpringCloud刷新配置报连不上mysql,账户密码错误,数据库密码做了加密的

SpringBoot版本:2.0.3 SpringCloud版本:Finchley.SR2 背景:配置数据库账户密码的ymal文件放在Git上,通过ConfigServer读取配置文件。数据库密码使用druid(1.1.9)进行加密 重现步骤:服务成功启动且能正常访问的情况下,不对配置文件做任何改动,当然也不改数据库密码,然后使用POST请求 ip:port/actuator/bus-refresh ,访问接口时必现。

报错如下: 2019-06-28 05:34:31.161 payment ERROR com.alibaba.druid.pool.DruidDataSource Line:2469 - create connection SQLException, url: jdbc:mysql://xx.xxx.xx.xx:3306/xxxx?characterEncoding=utf-8, errorCode 1045, state 28000 java.sql.SQLException: Access denied for user 'root'@'xx.xx.xx.xx' (using password: YES) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:871) at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1714) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1224) at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2190) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2221) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2016) at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:776) at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:47) at sun.reflect.GeneratedConstructorAccessor122.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:386) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330) at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:149) at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:786) at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:143) at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:218) at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:143) at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1515) at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1578) at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2466)

原提问者GitHub用户ghost

展开
收起
山海行 2023-07-05 19:34:52 211 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    如果在使用Spring Cloud时,刷新配置后项目报无法连接MySQL、账户或密码错误的问题,可能的原因有以下几个:

    MySQL配置信息错误
    最常见的情况还是 host、port、username、password 等配置写错了。

    加密后的MySQL密码无法正常解密
    尤其是MySQL密码使用加密存储,而Spring Cloud刷新配置后无法正确解密该密码。

    数据库 privilegest不足
    对于动态修改的MySQL配置,需要确保对应用户有相应的privileges。

    网络问题
    应用部署迁移导致原来连接MySQL的网络配置失效。

    时区不同步
    应用和MySQL的时区设置不一致可能也会造成连接失败。

    jar包版本不兼容
    MySQL驱动包与数据库版本不匹配也会报错。

    开启了MySQL密码失效检查
    MySQL开启了密码失效检查,密文不对就不能连接。

    针对您描述的情况,密码是加密存储的,很有可能是:

    加密算法更新了,刷新配置后无法再正确解密密码
    MySQL禁用了加密密码,报错提示密码错误
    解决的办法是:

    修改加密算法,刷新配置后能正确解密原来的密码
    不对密码做加密处理,直接明文存储
    使用DB证书授权而非用户名密码登录MySQL
    所以解决方案主要是要确保:

    Spring Cloud刷新后还能使用原来的MySQL密码
    加密解密算法与MySQL的要求相符
    MySQL开放对应用户的连接权限

    2023-07-30 16:17:07
    赞同 展开评论 打赏
  • 找出问题了,自己的锅,yml文件中配置了 filter: config: enabled: true 却没有配置filters: config

    原回答者GitHub用户ghost

    2023-07-06 11:01:51
    赞同 展开评论 打赏
  • 根据报错信息,访问数据库时出现了"Access denied for user 'root'@'xx.xx.xx.xx'"的错误。这是因为数据库连接的用户名和密码不正确导致的。

    首先,检查配置文件中数据库相关的配置是否正确。确保账户名和密码与数据库服务器上匹配,并且格式和大小写也要一致。

    如果配置文件的数据库密码是经过加密的,那么需要确认以下几点:

    1. 确保在解密密码之前,正确地引入了Druid依赖库。
    2. 检查密码解密的逻辑是否正确,包括使用正确的密码解密算法和密钥。
    3. 确保解密得到的密码能够成功地用于建立数据库连接。

    另外,根据重现步骤描述,你是通过POST请求 /actuator/bus-refresh 接口来刷新配置,但并没有改动配置文件。这可能意味着配置文件并没有被刷新,仍然保持原有的加密密码。此时,数据库连接仍然会使用旧的加密密码,导致认证失败。

    为了排除该问题,请按照以下步骤进行操作:

    1. 修改配置文件的数据库密码,将其更改为明文密码。
    2. 重新构建并启动服务以加载新的配置。
    3. 使用POST请求 /actuator/bus-refresh 接口来刷新配置。
    4. 确认配置文件已经成功刷新,并且数据库连接正常。

    如果以上步骤仍然无法解决问题,请提供更多关于你的配置文件、数据库连接和加密密码逻辑的信息,以便进一步帮助你解决该问题。

    2023-07-05 19:50:05
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像