我遇到了 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 登录?
POPMUISE
阿晨1998
相关分类