spring - 无法使用 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
它时,它工作得很好!
- 转储和 Spring Boot 应用程序都在同一台机器上运行(数据库服务器本身)
- 使用的用户名和密码相同
- 密码或用户中没有特殊字符(只有小写/大写字符和数字)
- jdbc 连接字符串如下所示:
jdbc:mariadb://server.company.domain:3306/dbname
- 我已经尝试使用
localhost
而不是服务器名称 - 当我更改 jdbc url、用户和密码时,同一个应用程序能够登录到我的开发 mariaDB
解决方案
我通过能够连接到数据库的命令运行了一个简短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
没有讲述完整的故事。它使您认为您的密码可能是错误的,但您因其他原因被拒绝。
推荐阅读
- javascript - 为什么滚动使用中间点击暂停间隔事件?
- node.js - typescript tsc Unexpected token { 导入时
- python - scons / SConscript 文件的缩进错误
- google-chrome - 尝试从本地加载 tensorflowJS 模型时出错,Fetch API 无法加载 downloads://model。对于 CORS 请求错误,URL 方案必须是“https”
- javascript - 如何使用表单验证来处理多个选项?
- r - 如何测试 enquos-type quosures 的 null 或缺失
- ruby-on-rails - 导轨 ERB。如何将“类”添加到 form.select do 循环?
- c# - 通过构造函数 C# 创建列表
- php - 在具有相同价值的相同 div 产品中显示 smarty
- wcf - 通过 net.pipe 的 wcf 服务调用中断服务器已拒绝客户端凭据