首页 > 解决方案 > 无法使用 JDBC 连接到 MariaDB,mysql utils 成功

问题描述

我使用 JDBC 和 Spring Boot 2.2.2 连接到 MariaDB 实例。登录失败并显示以下消息:

原因:java.sql.SQLInvalidAuthorizationSpecException:无法连接到地址=(host=server.company.domain)(port=3306)(type=master):用户'user'@'server.company.domain'的访问被拒绝(使用密码:YES)

当我运行mysqldump -u"user" -p"password" -h server.company.domain dbname它时,它工作得很好!

标签: springspring-bootjdbcmariadb

解决方案


我通过能够连接到数据库的命令运行了一个简短SHOW GRANTS;的命令。mysql输出给了我这个:

GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY PASSWORD 'nonono' REQUIRE SSL WITH GRANT OPTION

相关部分是REQUIRE SSL:与该服务器的连接需要加密。

当我检查其中的文件时,/etc/my.cnf.d/我发现一个包含(其中包括)这些行的文件:

[server]
ssl=1
ssl-cert=/path/to/certificate/cert.pem

通过谷歌搜索,我发现这个链接描述了如何将 JDBC 驱动程序设置为使用 ssl。trustServerCertificate它还向您解释了为什么在设置为之前您可能应该三思而后行true

spring.datasource.url现在看起来像这样:

jdbc:mariadb://server.company.domain:3306/dbname?useSSL=true&trustServerCertificate=true&serverSslCert=/path/to/certificate/cert.pem

简而言之:Access denied for user没有讲述完整的故事。它使您认为您的密码可能是错误的,但您因其他原因被拒绝。


推荐阅读