用户 'root'@'localhost' 在 context.xml 中有两个数据源的访问被拒绝

我遇到了 Java 8、MySQL Server 5.7.23、MySQL Connector for Java v5.1.45 和 Tomcat v9.0.12(在 Ubuntu Server 18.04 上运行)的问题。


我已经构建了一个简单的 Java 应用程序 (war),它在 MySQL 数据库中执行查询。


我的context.xml(我放了2个资源节点,一个用于生产环境,一个用于开发环境),从实际应用场景中我从CATALINA_OPTS中读取了一个名为“env”的参数并使用System.getProperty(“env”)读取它,应用程序可以选择合适的数据源来使用。


我以这种方式设置了 MySQL 权限(我还需要允许“dbuser”的外部访问,因为我有一个连接到这个 MySQL 数据库的外部客户端):


ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'veryStrongPwd';

CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'dbUserPwd!';

GRANT ALL PRIVILEGES ON *.* TO 'dbuser'@'localhost' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* TO 'dbuser'@'%' IDENTIFIED BY 'dbUserPwd!' WITH GRANT OPTION;

FLUSH PRIVILEGES;

Tomcat 没有任何特定的配置或资源配置,它只是解压到一个文件夹中的 v9.0.12。


我试图在 context.xml 中放入“root”和“dbuser”凭据,但是当我启动 Tomcat 时,出现以下问题:


ConnectionPool.init Unable to create initial connections of pool.

 java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)

        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)

        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)

        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:873)

        at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1710)

        at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1226)

...

在抛出这些例外之后,它会打印记录集,但为什么即使在 context.xml 中我设置了 dbuser 凭据,它也需要 root 登录?


收到一只叮咚
浏览 230回答 2
2回答

POPMUISE

在您context.xml的root用户密码为root. 在您的 MySQL 脚本中,您已将root用户密码设置为veryStrongPwd.如果您的问题更多是关于为什么即使您不使用也会出现错误Resource- 您将连接池的最小大小设置为3. 所以Tomcat会创建连接池,并尝试在启动时添加3个连接。或许,如果你设置minIdle到0它的工作,你怎么想。更新还有另一个设置 -initialSize默认为 10。将其设置为 0 应该会阻止 Tomcat 在启动时尝试使用该数据源。

阿晨1998

尝试从您用于连接的客户端检查权限 [IP]。当您创建一个从另一个终端连接而不是本地主机的新客户端时,有时需要具体化。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java