TiDB数据库如何回收DROP DATABASE的权限,但是保留DROP TABLE的权限?

【 TiDB 使用环境】测试
【 TiDB 版本】V6.5.4
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

把表全删了不就跟drop database一样吗,如果非要实现,只能对表单独赋权,参考:https://docs.pingcap.com/zh/tidb/stable/privilege-management#drop-database

1 个赞

目前发现revoke drop on test.* from ‘test_user’@‘%’ 发现会把test这个数据库里表的drop table权限也给回收了

数据库不能删除,但是有些表需要删除重建,所以需要有DROP TABLE权限

单表赋权太麻烦了,如果有几千张表这样一张一张的赋权也不太现实

可以动态SQL来生成grant语句

1 个赞

这个好像不行,只能回收drop

这种不要从数据库本身控制,通过上线审核工具来做吧,直连数据库还是危险

既然是重建,为什么不能alter,一定要drop再create呢

是的,drop权限粒度控制太大了,不够精细和灵活

比如,我有张表刚开始是设置了随机主键的聚簇表,现在要把随机主键去掉,alter就无法实现

1 个赞

这个应该由数据库去控制,而不是额外的第三方工具去实现

麻烦了

这样试试:

select concat('grant drop on test.',table_name,' to \'test_user\'\@\'%\';') 
from information_schema.tables
where table_schema='test' and table_type='BASE TABLE';
1 个赞

这种单个的没有问题,但是目前来说TiDB的DROP的权限控制粒度太大,如果放开DROP权限,意味着DROP DATABASE 和 DROP TABLE都有了,可以删库跑路了,但是如果回收DROP权限,则DROP DATABASE 和 DROP TABLE都没了。

根据权限撤回即可了。

目前没有单独撤回DROP DATABASE权限的操作

这个问题,加强流程解决不了吗

drop database [table] 权限只有管理员有才对

业务初始化权限就不该授权drop