Springboot MySQL + Docker 访问被拒绝错误

Posted

技术标签:

【中文标题】Springboot MySQL + Docker 访问被拒绝错误【英文标题】:Springboot MySQL + Docker Access Denied Error 【发布时间】:2022-01-23 20:50:15 【问题描述】:

我一直在努力解决如何解决此错误。

我有一个 Springboot 和 mysql 项目,我正在尝试 dockerize,我的 MySQL 容器启动正常,使用 docker container logs mysql-standalone 检查日志时,我没有收到错误。 p>

问题是当我尝试 docker container logs springboot-docker (My springboot image) 时,我收到此错误:

java.sql.SQLSyntaxErrorException: Access denied for user 'demo'@'%' to database 'docker_demo'
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ~[mysql-connector-java-8.0.27.jar!/:8.0.27]
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.27.jar!/:8.0.27]
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-java-8.0.27.jar!/:8.0.27]
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:448) ~[mysql-connector-java-8.0.27.jar!/:8.0.27]
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-java-8.0.27.jar!/:8.0.27]
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-java-8.0.27.jar!/:8.0.27]
    at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar!/:na]
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar!/:na]
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar!/:na]
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar!/:na]
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar!/:na]
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-4.0.3.jar!/:na]
    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-4.0.3.jar!/:na]

我创建了一个 demo MySQL 实例,而不是使用 root 实例。

我尝试以 root 身份登录 MySQL shell 并授予对我的 demo MySQL 实例中所有数据库的访问权限,但我仍然遇到同样的错误。

GRANT ALL ON *.* TO 'demo'@'localhost'; Query OK, 0 rows affected (0.02 sec)


Dockerfile

1 FROM adoptopenjdk/openjdk11:alpine-jre
  2 ADD target/docker-0.0.1-SNAPSHOT.jar springboot-mysql-docker.jar
  3 EXPOSE 8089
  4 ENTRYPOINT ["java","-jar","springboot-mysql-docker.jar"]
~                                                                

Docker 镜像


Docker ps -a


我有很多错误,但似乎已修复,看来这是我需要修复的最后一个问题才能最终能够在容器中运行我的项目。

【问题讨论】:

【参考方案1】:

看来问题出在您的授权声明上。 您正在使用语句GRANT ALL ON *.* TO 'demo'@'localhost'; 向演示用户授予权限,因此只有当该用户通过本地连接时,该权限才适用于演示用户,即。从同一台机器上的应用程序连接,由@'localhost'指定

像这样更新您的授权声明,GRANT ALL ON *.* TO 'demo'@'%';

【讨论】:

会尝试并回复您。 尝试授予所有权限时出现此错误。错误 1410 (42000):您不能使用 GRANT 创建用户 @ServletException askubuntu.com/questions/1322175/… 在谷歌上搜索了一段时间,找不到有效的解决方案,总是一样:错误 1410 (42000):在尝试 GRANT ALL ON 时,您不允许使用 GRANT 创建用户. TO 'demo'@'%'; @ServletException 您是否尝试过我发布的上述链接?

以上是关于Springboot MySQL + Docker 访问被拒绝错误的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot docker连接到mysql docker容器

docker springboot mysql整合

docker springboot mysql整合

Docker 教程不适用于 springboot+mysql+react 应用程序

Docker Compose部署Springboot+Mysql项目

Docker Compose部署Springboot+Mysql项目