1. 数据库版本

目前测试了 Mysql 8.0.19 ,Mysql 8.0.20,Mysql 5.7.22 都存在该问题(5.7和8.0版本应该都有该问题)

 

2. 问题描述

同事工作中发现了如下奇怪问题(直接上图)

Mysql 两个范围权限不一致,导致表访问异常

问题现象:

我们发现我们给用户赋予全局的 delete,create,index,alter权限,同时给用户赋予某张表的 select,insert,update,delete权限。然后对这张表进行 delete 操作时,居然报没有这张表的读权限。

# 注意这里是全局权限和表级别权限不一致,如果是数据库级别权限和表级别权限不一致,问题也是一样的。但是全局权限和数据库级别权限不一致时,并不会出现该问题,见下图:

Mysql 两个范围权限不一致,导致表访问异常

 

3.问题处理

查询 mysql bug 很早就有人提过这个bug,但是不知道为什么一直没有出patch。该问题的临时解决方案有如下两种

1)在高级别赋予合适的权限

比如上面的例子中你给全局权限中加上 select 权限就行  grant select on *.* to 'test_privileges'@'%';

2)只在一个级别赋权

上面的例子中,你把全局权限去掉就行(实际生产回收权限一定已小心)

revoke delete,create,index,alter on *.* from 'test_privileges'@'%';

 

关联文章:

https://bugs.mysql.com/bug.php?id=97971
https://bugs.mysql.com/bug.php?id=87420

关于Mysql权限你真的都了解?

 

相关文章: