MySQL报错: INSERT command denied to user ‘root’@’ip’…

1.报错

本地SpringBoot服务启动后,访问一个接口,接口需要向mysql中更新数据,结果报错

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: INSERT command denied to user 'root'@'ip'....

2.分析和解决

2.1 原因1-配置错误

看报错是向数据库中插入数据出错,检查数据库地址、端口号、数据库名称、用户名、密码等基本信息,发现无误,说明不是这里的问题。

2.2 原因2-语法错误

网上查找原因时发现一部分人遇到同样报错是因为语法出错,将mysql关键字用于表名、字段名等,例如表名写做order、字段名写做like等;或者是在写mapper.xml时不小心写错了哪里。

因为我的项目直接使用MBP,mapper由其直接生成,不存在语法错误,字段名也不涉及关键字,所以也不是这里的问题。

2.3 原因3-字段名映射

数据库表名是下划线,例如user_id,java中对象属性名是驼峰命名,例如userId,所以需要在application.yml中指明这种映射,否则可能找不到对应的字段:

mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true

但是不是本项目的问题。

2.4 原因4-权限不足

如果字段、名称、配置等均无误,可能是权限不足。

通过该指令可以看出,该数据库允许其所在的机器的客户端访问,但是我使用的mysql在服务器上,项目在本地,而项目每次访问服务器的mysql都会随机生成一个ip地址,所以我们允许所有ip对该数据库操作就可以了

GRANT ALL PRIVILEGES ON database_name.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

然后通过指令查看更新后的权限信息:

show grants for 'root'@'%';

此时再次访问该接口,成功。

3.补充

今天使用idea连接远程mysql遇到一个新的报错:

Access denied for user 'root'@'ip'(using password: YES)

感觉应该也是权限问题,打开服务器控制台修改权限时报错如下:

ERROR 1133 (42000): Can't find any matching row in the user table

是因为MySQL不允许创建没有密码的用户连接,所以把指令更改一下就好了:

grant all privileges on websocket.* to 'root'@'%' identified by 'root';

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注