我有一个特定用户,我想授予他更改表的权限,但只能更改包含其数据的表,例如,用户可以更改其个人资料数据,但只能更改其数据。我的意思是更改带有ID的行。
grant update on table1 where table1.id_user = id_user to user;
这可能吗?
答案 0 :(得分:1)
在MySQL中,这是不可能的。您将必须使用触发器。
例如,以下内容将在更新语句中传递的ID_USER
的值与当前数据库用户的名称进行比较,如果它们不同,则中止更新,使用the SIGNAL syntax引发错误。
DELIMITER $$
CREATE TRIGGER checkUpdateTable1
BEFORE UPDATE ON Table1
FOR EACH ROW
BEGIN
SELECT 1
FROM mysql.user
INTO @is_root
WHERE super_priv='Y' AND USER() = CONCAT(user, '@', host);
IF (@is_root IS NULL AND NEW.ID_USER <> USER()) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'error message';
END IF
END
$$
DELIMITER ;
注意:在雷蒙德·尼兰(Raymond Nijland)发表评论后,我编辑了帖子,以允许SUPER
用户更新任何行。