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

如何从sql触发器启动用户脚本,sql,database,triggers,informix,Sql,Database,Triggers,Informix,我不确定这是否可能。我有一个informix数据库,需要从数据库触发器启动一个bash脚本。中说明了如何启动用户过程,但它必须是存储过程;我想启动本地计算机上可用的用户程序。您可能不想这样做-因为运行程序会很慢-但是如果您决定仍要这样做,那么您将让触发器运行存储过程,存储过程将使用SYSTEM语句执行bash脚本 CREATE PROCEDURE trivial(c varchar(30) default "hello world") DEFINE cmd VARCHAR(60);

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

您可能不想这样做-因为运行程序会很慢-但是如果您决定仍要这样做,那么您将让触发器运行存储过程,存储过程将使用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错误