是否可以创建触发器来授予或撤销MySQL5.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//我得到的错误消息是:
错误代码:1422年。在存储的函数或触发器中不允许显式或隐式提交。
发布于 2011-05-28 14:34:45
您可以直接操作mysql数据库中的权限表。
表mysql.user拥有用户的普遍权利(对所有数据库的访问权)
表mysql.db保存每个数据库的访问权限
表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已经解释过的那样。

警告
请注意,mysql模式的结构可能会发生变化(并且在过去已经发生了变化)。
如果发生这种情况,您的查询可能会中断。
GRANT/REVOKE没有这个问题。
请谨慎使用这类代码,并检查升级MySQL服务器时是否一切都正常。
发布于 2011-05-28 13:59:24
在授权/撤销时再检查一遍文档。错误是暗示他们都是自动提交的。在触发器本身期间不能发生这种情况,因为触发器是作为正在进行的事务的一部分触发的。
https://stackoverflow.com/questions/6162052
复制相似问题