Đặc quyền tối thiểu cần thiết để thay đổi ràng buộc khóa ngoại là gì?


12

Đặc quyền tối thiểu cần thiết để thay đổi ràng buộc khóa ngoại là gì?

Tập lệnh di chuyển của tôi đã ngừng hoạt động sau khi MySQL 5.5.41 sửa lỗi này:

  • InnoDB cho phép tạo một khóa ngoại được tạo trong đó tham chiếu bảng cha mà người dùng không có đủ đặc quyền. (Lỗi # 18790730)

Tôi nhận được lỗi này:

SQLSTATE [42000]: Lỗi cú pháp hoặc vi phạm truy cập: 1142 Lệnh TÀI LIỆU THAM KHẢO bị từ chối đối với người dùng 'foo' @ 'localhost' đối với bảng 'core.users' (SQL: thay đổi bảng `user_baz` thêm ràng buộc user_baz_user_id_forign khóa ngoại `core`.`users` (` id`) khi xóa tầng trên tầng cập nhật)

Có nghĩa là tôi cần sửa các đặc quyền. Đặc quyền tối thiểu tôi cần là gì?

Câu trả lời:


15

Bạn cần thêm đặc quyền "TÀI LIỆU THAM KHẢO" cho vai trò của mình.


1
Loại câu trả lời "lý thuyết" này chỉ dẫn cho việc bổ sung thêm về cách thêm đặc quyền vào thực tế. Xem câu trả lời của @ Yuci's, cung cấp tất cả các chi tiết cần thiết. Đó là,GRANT REFERENCES ON test.user_baz TO 'foo'@'localhost';
Thị trưởng John

8
GRANT [type of permission] ON [database name].[table name] TO '[username]'@'[host name or IP address]';

Ví dụ:

GRANT REFERENCES ON test.user_baz TO 'foo'@'localhost';

1

Đầu tiên, nếu vẫn thất bại, hãy đọc tài liệu (phần Ghi chú sử dụng).

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.

Dưới đây là một ví dụ.

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> 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.