如何仅向特定行授予 MySQL 权限
how to grant MySQL privileges only to a specific row
假设有一个学生table
student(id,name,city)
我想创建一个用户 A 并授予仅更新 id=10 的记录的权限。
CREATE USER A ;
GRANT UPDATE ON student TO A WHERE student.id=10;
我试过了,还是不行。
不是单行,而是包含单行的视图,这将反过来更新实际的真实 table。
这可以通过每个学生的特定 table 视图来完成(是的,这将是一个混乱的数据库结构)。仅允许此用户访问视图 select/updates 并且主键将不可更新。主 table 将在更新视图时自行更新。
CREATE SCHEMA `example` ;
CREATE TABLE `example`.`student` (
`id` INT NOT NULL,
`name` VARCHAR(45) NULL,
`email` VARCHAR(45) NULL,
PRIMARY KEY (`id`));
INSERT INTO `example`.`student` (`id`, `name`, `email`) VALUES ('1', 'bob', 'bob@bob.com');
USE `example`;
CREATE
OR REPLACE SQL SECURITY DEFINER
VIEW `student_1` AS
SELECT
`student`.`id` AS `id`,
`student`.`name` AS `name`,
`student`.`email` AS `email`
FROM
`student`
WHERE
(`student`.`id` = '1');
CREATE USER 'student_1_user'@'localhost' IDENTIFIED BY 'user_password';
GRANT SELECT,UPDATE ON example.student_1 TO student_1_user@localhost IDENTIFIED BY 'user_password';
UPDATE example.student_1 SET email='newemail@bob.com'; // note no primary key needed or allowed
假设有一个学生table
student(id,name,city)
我想创建一个用户 A 并授予仅更新 id=10 的记录的权限。
CREATE USER A ;
GRANT UPDATE ON student TO A WHERE student.id=10;
我试过了,还是不行。
不是单行,而是包含单行的视图,这将反过来更新实际的真实 table。
这可以通过每个学生的特定 table 视图来完成(是的,这将是一个混乱的数据库结构)。仅允许此用户访问视图 select/updates 并且主键将不可更新。主 table 将在更新视图时自行更新。
CREATE SCHEMA `example` ;
CREATE TABLE `example`.`student` (
`id` INT NOT NULL,
`name` VARCHAR(45) NULL,
`email` VARCHAR(45) NULL,
PRIMARY KEY (`id`));
INSERT INTO `example`.`student` (`id`, `name`, `email`) VALUES ('1', 'bob', 'bob@bob.com');
USE `example`;
CREATE
OR REPLACE SQL SECURITY DEFINER
VIEW `student_1` AS
SELECT
`student`.`id` AS `id`,
`student`.`name` AS `name`,
`student`.`email` AS `email`
FROM
`student`
WHERE
(`student`.`id` = '1');
CREATE USER 'student_1_user'@'localhost' IDENTIFIED BY 'user_password';
GRANT SELECT,UPDATE ON example.student_1 TO student_1_user@localhost IDENTIFIED BY 'user_password';
UPDATE example.student_1 SET email='newemail@bob.com'; // note no primary key needed or allowed