mysql - 我可以授予用户仅使用他的数据更改表的权限吗?
问题描述
我有某个用户,我想授予他更改表的权限,但只能更改包含他的数据的表,例如用户可以更改他的个人资料数据,但只能更改他的数据。我的意思是用他的 id 改变行。
grant update on table1 where table1.id_user = id_user to user;
这可能吗?
解决方案
这在 MySQL 中以标准方式是不可能的。您将不得不使用触发器。
例如,下面将ID_USER
update 语句中传递的值与当前数据库用户的名称进行比较,如果它们不同,则中止更新,使用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
用户更新任何行。
推荐阅读
- javascript - 如何检查电子邮件地址是否已在 firebase auth 上注册,就像 firebaseui 一样?
- amazon-web-services - Amazon EC2 服务器偶尔冻结
- firebase - 无法使用 cli 命令登录 Firebase
- php - 使用 htaccess 在 Wordpress 中重写 URL
- python - 重写列表列表中的值
- haskell - 类型正确的功能可以不适用吗?(哈斯克尔)
- excel - Excel VBA 为特定行项应用过滤器
- hadoop - 如何一次删除 hive 中外部表的所有空/无效分区
- reactjs - 如何从 Webpack 4 React 项目编码拆分包(fontawesome)
- docker - 在容器中运行的应用程序无法连接到 VM localhost 上的 couchbase