Rootop 服务器运维与web架构

mysql触发器实现指定表某行数据禁止更新

场景:
对外提供的演示系统,提供了一个测试用户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 ;

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/4833.html

作者:Venus

专注于 服务器运维与web架构 E-mail:venus#rootop.org

评论已关闭。