我正在制作一个MySQL数据库作为我的webgame应用程序的一部分,在数据库中该用户表中有一个管理员用户。作为一种安全保护,我需要一些方法来使用触发事件来防止任何人删除该用户,因为很少有人找到在我的数据库上运行查询的方法。
答案 0 :(得分:0)
如果为admin用户发出delete语句,则可以使用signal
语法引发错误。假设您通过条件name='admin'
识别他:
DELIMITER $$
CREATE TRIGGER users_protect_admin_del_tr
BEFORE DELETE ON users
FOR EACH ROW
BEGIN
IF old.name = 'admin' THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Admin deletion prevented';
END IF;
END
$$
DELIMITER ;
编辑:
正如@Uueerdo评论的那样,通过更新用户名然后删除它(或者只是让它更新,这可能会破坏系统)可以很容易地规避这个触发器。需要额外的触发器以防止更新:
DELIMITER $$
CREATE TRIGGER users_protect_admin_update_tr
BEFORE UPDATE ON users
FOR EACH ROW
BEGIN
IF old.name = 'admin' THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Admin updating prevented';
END IF;
END
$$
DELIMITER ;