解决MySql数据库远程访问Access denied for user: xxx@%' to database ‘datatest’ 问题
常记录:在新建项目的时候出现了这个问题:
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Access denied for user: 'sariel@%' to database 'datatest'
主要有几点原因
第一:用户是否能够远程访问到这个数据库,具体可以用Navicat for MySQL之类的工具先进行访问,
也可以考虑https://jingyan.baidu.com/article/4f7d57128e965f1a201927e4.html(我倒是没用过这种方法)
若访问失败,则是因为这个用户没有访问权限导致。
在数据库服务器上,登录数据库
mysql -uroot -p
然后执行
GRANT ALL PRIVILEGES ON *.* TO sariel@’%’ IDENTIFIED BY ’000000′;
参数说明: ALL PRIVILEGES表示赋给远程登录用户的权限,ALL PRIVILEGES表示所有的权限,可以单独或组合赋select,update,insert,delete权限;
*.*:第一个*表示要赋权的数据库名,*表示全部数据库了,第二个*表示数据库下的表名,同理,*表示全部表,也可以根据需求限制表;
sariel表示要赋权的用户;
%表示远程登录的IP,如果要限制登录IP的话,这里就添允许登录的IP,比如192.18.1.99等,%表示不限制IP);
000000是用户远程登录的密码。
如果出现:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%’ IDENTIFIED BY ’000000′' at line 1
表示你是复制粘贴过去的,注意单引号的格式,采用英文半角。
最后执行:FLUSH PRIVILEGES;
再次测试,如果能访问成功,代表数据库可以被远程连接。
再次启动服务进行测试,如果依旧出现这个问题,检查jdbc.properties中的参数
jdbc.url=jdbc:mysql://localhost:3306/datatest?useUnicode=true&characterEncoding=utf8
jdbc.username = sariel
jdbc.password = 000000
检查地址,端口,数据库名称,用户名,密码这五个参数是否正确