如何在MySQL中使用跳转事件来防止某个用户被删除

时间:2015-09-16 16:38:00

标签: mysql sql triggers

我正在制作一个MySQL数据库作为我的webgame应用程序的一部分,在数据库中该用户表中有一个管理员用户。作为一种安全保护,我需要一些方法来使用触发事件来防止任何人删除该用户,因为很少有人找到在我的数据库上运行查询的方法。

1 个答案:

答案 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 ;