数据库GRANT权限绑定表名还是表引用?重命名后权限是否生效?
结论
- 原表A上配置的
GRANT SELECT权限不会自动适用于重命名后的新A表 - 需要为新A表重新执行SELECT授权操作
原理说明
包括MySQL在内的绝大多数主流关系型数据库,表级权限是绑定在具体的表对象实体上,而非绑定「A」这个表名:
- 执行
RENAME TABLE A TO A_old时,原表实体被改名,原本配置在A上的所有权限会跟着实体迁移到A_old上,此时被授权的用户仅对A_old有SELECT权限 - 后续把A_new重命名为A时,这个名字对应的是你新建的表实体,该实体从创建起就没有配置过对应IP、对应用户的SELECT权限,不存在自动继承同名旧表权限的机制。
校验方式
重命名操作全部完成后,可执行以下命令核对权限配置:SHOW GRANTS FOR '授权用户名'@'允许访问的IP地址';
返回结果只会展示该用户对A_old的SELECT权限,不会包含新A表的权限记录,直接复用原来的GRANT语句为新A表补授权即可。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

