【现象】:
2023-07-12 10:53:19,436 DEBUG .DeEngineMapper.selectByExampleWithBLOBs: 137 - <== Total: 1
java.sql.SQLException: Access denied for user '***'@'***' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:871)
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1714)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1224)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2190)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2221)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2016)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:776)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:386)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
at io.dataease.provider.datasource.JdbcProvider.getConnection(JdbcProvider.java:520)
at io.dataease.provider.datasource.JdbcProvider.checkStatus(JdbcProvider.java:363)
at io.dataease.plugins.datasource.provider.DefaultJdbcProvider.handleDatasource(DefaultJdbcProvider.java:210)
at io.dataease.plugins.datasource.provider.DefaultJdbcProvider.getConnectionFromPool(DefaultJdbcProvider.java:323)
at io.dataease.provider.datasource.JdbcProvider.getData(JdbcProvider.java:343)
at io.dataease.service.dataset.DataSetTableService.checkEngineTableIsExists(DataSetTableService.java:2549)
at io.dataease.service.dataset.DataSetTableService.getPreviewData(DataSetTableService.java:752)
【分析】:
java.sql.SQLException: Access denied for user '***'@'***' (using password: YES)
错误指连接数据库的参数错误,在DataEase中有可以能有三处原因导致,每种原因对应一种解决方法。
【解决方法】
方法1:原因为数据库的账号密码错了,直接修改配置文件即可。
/opt/dataease/conf/dataease.properties 文件的配置中的参数修改为正确的参数,修改后,重启dataease。
截图如下:
方法2:数据库账号密码是正确的,但没有访问权限。这种问题,还检查,使用数据库客户端,连接一下,如果连接成功,就排查这种原因。如果没有连接成功,就按如下方法解决。
下面以mysql举例,注意:不同版本命令有差别
## 进入 mysql
mysql -u root -p
# 输入密码 root
## 使用 mysql 库
use mysql;
## 更新权限
update user set host='%' where user='root';
grant all privileges on *.* to 'root'@'%' identified by 'rot' with grant option;
## 刷新
flush privileges;
## 退出
exit
方法3:dataease可以登录,但访问数据集时,点某些数据集,报如下错误
Data source connection exception: Access denied for user '***'@'***' (using password: YES)
这个问题比较隐蔽,我跟踪代码时,才找到解决方法,其解决方法如下:
找到de_engine表中把configuration字段中的数据库账号密码修改正确的,修改后,重启dataease