解决mysql中给用户授权是报错error:near ‘identified by ‘password‘‘

省流

尝试删除identified by ‘password',如果未成功产生了其他报错再往下看

该报错的问题是源于:用户只能给所访问地址内的用户授权,root用户默认可访问本地,所以给自己或者其他地址用户授权时就会报错

所以要解决这个问题,首先就是该表,改root的访问权限,再来授权

废话

在本地写的一个项目拉到虚拟机里跑,无法连接数据库,需要开放远程连接,根据网上教程开启远程端口

于是乎先打开了百度,先用了这位老哥的解决方式,但是在授权的时候发生了报错:

开启MySQL远程访问权限 允许远程连接_mysql 远程访问-CSDN博客

本来是直接把报错全部扔给百度的,结果发现关键词只在1064(42000)上了,没办法只能搜授权时出现identified by,于是乎找到了下面这篇:

mysql 8.0.11 中使用 grant ... identified by 时 error 1064 near 'identified by '密码'' at line 1_grant on identified-CSDN博客

文中提到了一个问题总结一下就是得先创用户后授权,听了建议结果还是报错了:

只能继续搜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)

所以想解决上面的问题就可以:

  1. 修改root的可访问地址
  2. 刷新权限
  3. 授予其他用户权限
  4. 刷新权限

解决方式:

修改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)

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值