场景:
对外提供的演示系统,提供了一个测试用户test,要禁止test用户修改密码,防止别人无法登陆。
1、在代码中屏蔽掉密码修改逻辑(推荐)。
2、数据库中禁止test用户这条数据的修改。
注意:这里要实现禁止某行(1条)的数据更新,而不是限制整个表的数据更新。
# 表结构
CREATE TABLE `aaa` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(100) DEFAULT NULL,
`password` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
# 触发器实现禁止密码字段修改
# 方法就是在更新前检查新密码是否和老密码一致,如果不一致,则设置新密码字段值为旧值,通过new或者old获取新旧值。
# 通过判断username来精确到某一条数据
DELIMITER $$
USE `test`$$
DROP TRIGGER /*!50032 IF EXISTS */ `deny_test_password`$$
CREATE
/*!50017 DEFINER = 'root'@'%' */
TRIGGER `deny_test_password` BEFORE UPDATE ON `aaa`
FOR EACH ROW BEGIN
IF old.username = 'test' THEN
IF new.password != '111' THEN
SET new.password = '111';
END IF;
END IF;
END;
$$
DELIMITER ;
专注于 服务器运维与web架构
E-mail:venus#rootop.org