如何从sql触发器启动用户脚本

时间:2011-11-17 09:48:15

标签: sql database triggers informix

我不确定是否有可能。我有一个informix数据库,我需要从数据库触发器启动一个bash脚本。在informix documentation中解释了如何启动用户过程,但它必须是一个存储过程;我想在本地计算机上启动一个用户程序。

1 个答案:

答案 0 :(得分:2)

您可能不想这样做 - 因为运行程序会很慢 - 但是如果您决定仍然想要这样做,那么您将使触发器运行存储过程,并且存储过程将使用SYSTEM语句执行bash脚本。

CREATE PROCEDURE trivial(c varchar(30) default "hello world")
    DEFINE cmd VARCHAR(60);
    LET cmd = "echo " || c || " >/tmp/hello.world 2>&1";
    SYSTEM cmd;
END PROCEDURE

请注意,该脚本没有标准输入或标准输出的终端或标准错误(另外,我认为它得到/dev/null)。另请注意,我显示的命令充满了权限问题 - 运行该过程的第二个用户可能会在文件上获得权限错误。您还需要警惕'Unix注入攻击' - 显示的代码采用脚本调用者提供的字符串,然后运行它。如果字符串包含后引号或...则用户可以执行命令。对自己来说运行命令可能不是很好,但要对我刚刚展示的内容持怀疑态度。

如果脚本以非零状态退出,则存储过程将失败,并显示错误-668和与退出状态对应的ISAM错误。