首页 > 解决方案 > 我可以授予用户仅使用他的数据更改表的权限吗?

问题描述

我有某个用户,我想授予他更改表的权限,但只能更改包含他的数据的表,例如用户可以更改他的个人资料数据,但只能更改他的数据。我的意思是用他的 id 改变行。

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

这可能吗?

标签: mysqlsqldatabasesql-updatedatabase-trigger

解决方案


这在 MySQL 中以标准方式是不可能的。您将不得不使用触发器。

例如,下面将ID_USERupdate 语句中传递的值与当前数据库用户的名称进行比较,如果它们不同,则中止更新,使用SIGNAL 语法引发错误。

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


推荐阅读