背景
MySQL的权限REFERENCES是控制是否允许给表建立外键关联关系的权限。
问题现象
从MySQL5.6版本的数据库中导出的含外键的表,然后再导入到MySQL5.7版本的数据库中,导入过程中产生如下报错:
ERROR 1142 (42000): REFERENCES command denied to user 'user'@'host' for table 'tb_01';
复制
查看5.7版本数据库中使用的账号权限,确实没有REFERENCES权限信息。进一步查看5.6版本数据库中的账号权限,发现也不存在REFERENCES权限,但是5.6的数据库确实成功创建了含外键的表,这是为什么呢?
原因分析
经过查阅MySQL官方文档,发现MySQL在5.5、5.6、5.7版本中都存在REFERENCES权限,但是对REFERENCES权限的使用要求是存在差异的:
- MySQL5.5版本This privilege is unused before MySQL 5.5.41. As of 5.5.41, creation of a foreign key constraint requires at least one of the SELECT, INSERT, UPDATE, DELETE, or REFERENCES privileges for the parent table.
- MySQL5.6版本This privilege is unused before MySQL 5.6.22. As of 5.6.22, creation of a foreign key constraint requires at least one of the SELECT, INSERT, UPDATE, DELETE, or REFERENCES privileges for the parent table.
- MySQL5.7版本Creation of a foreign key constraint requires the REFERENCES privilege for the parent table.
如上所示,在5.5和5.6版本中只需要增删查改权限即可,而5.7正式启用REFERENCES权限,需要显示的授予REFERENCES权限才能创建外键关系到表。
解决方案
对MySQL5.7版本的数据库账户,显示的授予REFERENCES权限,解决导入含外键关系表的过程中导致的报错。
案例复现
建表SQL如下:
CREATE TABLE tb_01 (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(64) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE tb_02 (
id int(11) NOT NULL AUTO_INCREMENT,
address varchar(64) NOT NULL,
PRIMARY KEY (id),
CONSTRAINT tb_02_ibfk_1 FOREIGN KEY (id) REFERENCES tb_01 (id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制
MySQL5.5和5.6版本,直接创建成功,而MySQL5.7版本则报错如下:
ERROR 1142 (42000): REFERENCES command denied to user 'user'@'host' for table 'tb_01';
复制
给5.7的账号添加REFERENCES权限,重新执行建表语句,创建成功。
最后修改时间:2021-08-12 14:32:13
文章转载自小小亮,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
2889次阅读
2025-04-25 18:53:11
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
841次阅读
2025-04-25 15:30:58
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
487次阅读
2025-04-17 17:02:24
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
426次阅读
2025-04-15 23:49:58
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
371次阅读
2025-04-15 14:48:05
MySQL 8.0 OCP 1Z0-908 考试解析指南(二)
JiekeXu
274次阅读
2025-04-30 17:37:37
记录MySQL数据库的一些奇怪的迁移需求!
陈举超
274次阅读
2025-04-15 15:27:53
SQL优化 - explain查看SQL执行计划(下)
金同学
261次阅读
2025-05-06 14:40:00
MySQL 8.0 OCP 1Z0-908 考试题解析指南
青年数据库学习互助会
242次阅读
2025-04-30 12:17:54
MySQL 8.4 新特性深度解析:功能增强、废弃项与移除项全指南
JiekeXu
226次阅读
2025-04-18 20:21:32