gpt4 book ai didi

mysql - 授予/撤销权限的 SQL 触发器

转载 作者:可可西里 更新时间:2023-11-01 07:33:36 26 4
gpt4 key购买 nike

是否可以创建触发器来授予或撤销 mysql 5.1 中的用户权限?

我试过这个:

delimiter //

create trigger sup_tog
before update on members
for each row begin
if old.fname = "xyz" and new.status = "b"
then
revoke select, update on mkdb.* from xyz;
end if;

end//

我得到的错误信息是:

Error Code: 1422. Explicit or implicit commit is not allowed in stored function or trigger.

最佳答案

可以直接操作mysql数据库中的权限表。

mysql.user拥有用户的通用权限(对所有数据库的访问权限)
mysql.db 拥有每个数据库的访问权限
table mysql.table_priv:每个表的访问权限

将触发器更改为:

DELIMITER $$

CREATE TRIGGER bu_members BEFORE UPDATE ON members FOR EACH ROW
BEGIN
IF old.fname = "xyz" AND new.status = "b" THEN BEGIN
/*revoke select, update on mkdb.* from xyz;*/
UPDATE mysql.db SET
select_priv = 'N'
, update_priv = 'N'
WHERE mysql.db.user = 'xyz' AND mysql.db.db = 'mkdb';
END; END IF;

END $$

请注意,更改只会在当前交易结束后生效。
正如@Denis 已经解释的那样,这必须发生在触发器之外。

enter image description here 警告
请注意,mysql 架构的结构可能会发生变化(并且过去已经发生变化)
如果发生这种情况,您的查询可能会中断。
GRANT/REVOKE没有这个问题。
请谨慎使用此类代码,并检查升级 MySQL 服务器后是否一切正常。

关于mysql - 授予/撤销权限的 SQL 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6162052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com