mysql trigger 问题

2018-07-06 23:54:52 +08:00
 NimaQu

我有一个演示站,但 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 ,查了半天也查不出究竟为什么

3456 次点击
所在节点    MySQL
9 条回复
ysc3839
2018-07-07 00:37:24 +08:00
set user.pass 试试?
l12ab
2018-07-07 00:49:57 +08:00
定时任务?
TtiGeR
2018-07-07 01:18:44 +08:00
与其改回来,不如直接在 Trigger 里用 SIGNAL 禁止 Update ?
NimaQu
2018-07-07 01:36:49 +08:00
@ysc3839 还是一样 emmm
yangqi
2018-07-07 01:38:56 +08:00
trigger 不能更新被激发的表,这条路别想了。只能用 stored procedure, 那个把简单问题复杂化了。

简单的就是在代码里加上测试或者演示环境判断,禁止改密码或者用默认密码,反正就很简单了。
sker101
2018-07-07 01:44:28 +08:00
我 github 上的演示站点都是在代码里禁止了 比如筛选 ip 只允许特地 ip 对数据库进行操作
这样也比 mysql 里用 trigger 灵活点 毕竟你数据库能操作的东西有限
caola
2018-07-07 01:46:09 +08:00
禁止修改密码还不简单,直接把密码 UPDATE SQL 语句的地方注释掉,永久无法 UPDATE 入库
NimaQu
2018-07-07 02:06:49 +08:00
@caola 改动代码以后 git pull 就不方便了
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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/468793

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX