更改外键约束所需的最低权限是多少?
在MySQL 5.5.41修复此错误后,我的迁移脚本停止工作:
我收到此错误:
SQLSTATE[42000]:语法错误或访问冲突:1142 REFERENCES 命令拒绝用户 'foo'@'localhost' 用于表 'core.users'(SQL:alter table `user_baz` 添加约束 user_baz_user_id_foreign 外键(`user_id`)引用`core`.`users`(`id`)在更新级联上删除级联)
这意味着我需要修复权限。我需要的最低权限是多少?
小智 20
您需要为您的角色添加“REFERENCES”权限。
小智 12
GRANT [type of permission] ON [database name].[table name] TO '[username]'@'[host name or IP address]';
Run Code Online (Sandbox Code Playgroud)
例如:
GRANT REFERENCES ON test.user_baz TO 'foo'@'localhost';
Run Code Online (Sandbox Code Playgroud)
首先,如果其他方法都失败,请阅读文档(使用说明部分)。
To use `ALTER TABLE`, you need `ALTER`, `CREATE` and `INSERT` privileges for the table. Note that the user (billy) granted these privileges cannot drop the table.
Run Code Online (Sandbox Code Playgroud)
下面是一个例子。
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost | <=== now root user
+----------------+
1 row in set (0.00 sec)
mysql> CREATE TABLE a(b VARCHAR(3) PRIMARY KEY); <=== Must be PK to be FK in another table.
Query OK, 0 rows affected (0.28 sec)
mysql> CREATE TABLE c(d VARCHAR(3), KEY c_ix (d));
Query OK, 0 rows affected (0.35 sec)
mysql> GRANT ALTER, CREATE, INSERT ON c TO billy; <=== Privileges to billy
Query OK, 0 rows affected (0.00 sec)
mysql> exit;
Bye
logon as billy
[pol@localhost dbahelper-master]$ /mysql/5.7/inst/bin/mysql -S /mysql/5.7/inst/mysql.sock -u billy -pdba
mysql> use test;
Database changed
mysql>
mysql> ALTER TABLE c ADD CONSTRAINT fk_c_a FOREIGN KEY (d) REFERENCES a(b);
Query OK, 0 rows affected (0.64 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> SHOW CREATE TABLE c;
| c | CREATE TABLE `c` (
`d` varchar(3) DEFAULT NULL,
KEY `c_ix` (`d`),
CONSTRAINT `fk_c_a` FOREIGN KEY (`d`) REFERENCES `a` (`b`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
mysql>
mysql> drop table c;
ERROR 1142 (42000): DROP command denied to user 'billy'@'localhost' for table 'c'
mysql>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
27741 次 |
最近记录: |