省流
尝试删除identified by ‘password',如果未成功产生了其他报错再往下看
该报错的问题是源于:用户只能给所访问地址内的用户授权,root用户默认可访问本地,所以给自己或者其他地址用户授权时就会报错
所以要解决这个问题,首先就是该表,改root的访问权限,再来授权
废话
在本地写的一个项目拉到虚拟机里跑,无法连接数据库,需要开放远程连接,根据网上教程开启远程端口
于是乎先打开了百度,先用了这位老哥的解决方式,但是在授权的时候发生了报错:
开启MySQL远程访问权限 允许远程连接_mysql 远程访问-CSDN博客
本来是直接把报错全部扔给百度的,结果发现关键词只在1064(42000)上了,没办法只能搜授权时出现identified by,于是乎找到了下面这篇:
文中提到了一个问题总结一下就是得先创用户后授权,听了建议结果还是报错了:
只能继续搜QAQ,于是又搜到了一面这篇:
MySQL8报错:授权语句中的(IDENTIFIED BY)报语法错误-CSDN博客
当然直接总结以下,他的解决办法就是把报错的地方删掉,ok该命令终于有了突破性的进展,虽然报错了,但是这回的报错信息很直白的点名了原因:
又是熟悉的百度,但是下面这篇真的解决了问题:
解决mysql中 you are not allowed to create user with grant 的问题_you are not allow to grant-CSDN博客
问题分析:
默认的root用户只能给localhost上的用户授权(虽然root确实有授权的权限),所以在给用户授权给其他IP上的用户时就会报错
查询user表里的数据就可以看到root的权限和可访问地址:
mysql> select host,user,grant_priv from user;
+-------------+---------------------------+--------------+
| host | user | grant_priv |
+-------------+---------------------------+--------------+
| 200.0.0.1 | centosroot | N |
| localhost | mysql.infoschema | N |
| localhost | mysql.session | N |
| localhost | mysql.sys | N |
| localhost | root | Y |
+-------------+---------------------------+--------------+
5 rows in set (0.00 sec)
所以想解决上面的问题就可以:
- 修改root的可访问地址
- 刷新权限
- 授予其他用户权限
- 刷新权限
解决方式:
修改root的可访问权限
注意本操作主旨是给root用户更高的访问权限,在让其访问,如果不想更改root用户可以直接看补充
mysql> update user set host='%' where user='root' ;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> grant all privileges on *.* to 'root'@'%' ;
Query OK, 0 rows affected (0.02 sec)mysql> flush privileges ;
Query OK, 0 rows affected (0.01 sec)
此时再查user表中的数据:
mysql> select host,user,grant_priv from user;
+-------------+---------------------------+--------------+
| host | user | grant_priv |
+-------------+---------------------------+--------------+
| 200.0.0.1 | centosroot | N |
| localhost | mysql.infoschema | N |
| localhost | mysql.session | N |
| localhost | mysql.sys | N |
| % | root | Y |
+-------------+---------------------------+--------------+
5 rows in set (0.00 sec)
再尝试给其他地址用户授权
mysql> GRANT ALL PRIVILEGES ON *.* TO 'centosroot'@'200.0.0.1';
Query OK, 0 rows affected (0.01 sec)mysql> flush privileges ;
Query OK, 0 rows affected (0.01 sec)
补充
其实到此已经解决了问题,但是如果并没有完,当我们把授权指令的地址改为%的还是会报错
mysql> GRANT ALL PRIVILEGES ON *.* TO 'centosroot'@'%';
ERROR 1410 (42000): You are not allowed to create a user with GRANT
其实这跟root用户不能授权其他地址一样的道理,其实只需要在创建用户的时候就把访问地址设置为%就行了:
mysql> create user 'centosroot'@'%' identified by 'root';
Query OK, 0 rows affected (0.02 sec)
当然如果已经创建了,也可以直接通过改user表的方式再执行操作:
mysql> update user set host='%' where user='centosroot';
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
其实到此就已经完成了(因为已经可以访问了),但是还是继续授权(把该用户也变为管理员):
mysql> GRANT ALL PRIVILEGES ON *.* TO 'centosroot'@'%';
Query OK, 0 rows affected (0.01 sec)mysql> flush privileges ;
Query OK, 0 rows affected (0.02 sec)