关于 ERROR 1141 (42000): There is no such grant defined for user ‘xxx‘ on host ‘yyy‘ 的一种原因

今天做了一个实验,
mysql> select * from tables_priv;
±----------±---------±------±-----------±---------------±--------------------±-----------±------------+
| Host | Db | User | Table_name | Grantor | Timestamp | Table_priv | Column_priv |
±----------±---------±------±-----------±---------------±--------------------±-----------±------------+
| localhost | schoolDB | zhang | Vjava | root@localhost | 2022-01-18 16:33:16 | Select | |
±----------±---------±------±-----------±---------------±--------------------±-----------±------------+
1 row in set (0.00 sec)

mysql> revoke select on schoolDB.Vjava from 'zhang'@'localhost';
ERROR 1141 (42000): There is no such grant defined for user ‘zhang’ on host ‘localhost’
出现错误提示,仔细确认了命令语句都正确,没有错别字,用户名user 和主机host 都拼写无误,
但仍报错,
ERROR 1141 (42000): There is no such grant defined for user ‘zhang’ on host ‘localhost’
这说明,这个user+host的组合出现了问题,

于是,迅速查询 user 表,如下,
mysql> select user,host from user;
±------±----------------------+
| user | host |
±------±----------------------+
| zhao | % |
| root | 127.0.0.1 |
| chen | 192.168.231.% |
| li | 192.168.231.% |
| root | 192.168.231.% |
| wang | 192.168.231.% |
| zhang | 192.168.231.% |
| root | localhost |
| root | localhost.localdomain |
±------±----------------------+
的确没有用户 ‘zhang’@‘localhost’,是之前把这个用户删除了,
所以,当revoke的时候就一直被拒绝,

想了一个解决方案,就是再重新建立这个用户,然后再去 revoke 回收权限,
于是,开始创建用户
mysql> create user 'zhang'@'localhost' ;
ERROR 1396 (HY000): Operation CREATE USER failed for ‘zhang’@‘localhost’
但报错,
经过网上查询,得知,

Assume the user is there, so drop the user
After deleting the user, there is need to flush the mysql privileges
Now create the user.

之前,drop user 删除此用户的时候,没有flush privileges 的原因,需要手工再次执行 drop user 并重新 flush privileges,
所以需要再 drop user 一遍,并刷新特权 flush privileges;

mysql> drop user 'zhang'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

在创建用户之前,又运行了一次,select * from tables_priv;,看到 随着 drop user 和flush privileges,
跟这个用户有关的 特权也一并被删除了。如下,
mysql> select * from tables_priv;
Empty set (0.00 sec)

所以,说,revoke 报错,和 create user 报错 ERROR 1141 (42000),
的根本原因是,在 drop user 的时候,没有进行 刷新特权的操作 即 flush privileges 导致的,
January the 28 th 2022 Friday

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值