我有一个演示站,但 admin 用户总是被改密码,不想改文件因为会导致 git pull 不方便,所以想设置一个 trigger 在有人 update 的时候自动把密码改回来,设置触发器的时候,用
UPDATE user SET pass = '8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918' WHERE user.id = '28';
可以正常设置,但是在 update 的时候会提示 Can't update table 'user' in stored function/trigger because it is already used by statement which invoked this
查了下是循环导致的报错,要直接使用 set,改了下用
CREATE DEFINER=root@localhost TRIGGER resetpasswd AFTER UPDATE ON user FOR EACH ROW set pass = '8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918' WHERE id = '28';
的时候 mysql 提示 ERROR 1193 (HY000): Unknown system variable 'pass'
,没学过 mysql ,查了半天也查不出究竟为什么
1
ysc3839 2018-07-07 00:37:24 +08:00
set user.pass 试试?
|
2
l12ab 2018-07-07 00:49:57 +08:00 via iPhone
定时任务?
|
3
TtiGeR 2018-07-07 01:18:44 +08:00 via iPhone
与其改回来,不如直接在 Trigger 里用 SIGNAL 禁止 Update ?
|
5
yangqi 2018-07-07 01:38:56 +08:00
trigger 不能更新被激发的表,这条路别想了。只能用 stored procedure, 那个把简单问题复杂化了。
简单的就是在代码里加上测试或者演示环境判断,禁止改密码或者用默认密码,反正就很简单了。 |
6
sker101 2018-07-07 01:44:28 +08:00 via iPhone
我 github 上的演示站点都是在代码里禁止了 比如筛选 ip 只允许特地 ip 对数据库进行操作
这样也比 mysql 里用 trigger 灵活点 毕竟你数据库能操作的东西有限 |
7
caola 2018-07-07 01:46:09 +08:00
禁止修改密码还不简单,直接把密码 UPDATE SQL 语句的地方注释掉,永久无法 UPDATE 入库
|
9
wewall 2018-07-07 19:23:38 +08:00
after update
IF( '12' != (SELECT `table`.column1` FROM `table` WHERE `table`.`column2` = '') /*根据需要修改为 not in,in,=,!=*/ ) THEN UPDATE `table` SET `table`.`column1` = '12' WHERE `table`.`column2` = ''; END IF |