我可以授予用户仅用其数据更改表的权限吗?

时间:2019-01-20 02:01:43

标签: mysql

我有一个特定用户,我想授予他更改表的权限,但只能更改包含其数据的表,例如,用户可以更改其个人资料数据,但只能更改其数据。我的意思是更改带有ID的行。

grant update on table1 where table1.id_user = id_user to user;

这可能吗?

1 个答案:

答案 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用户更新任何行。