Как запустить пользовательский скрипт из SQL-триггера - PullRequest
1 голос
/ 17 ноября 2011

Я не уверен, возможно ли это. У меня есть база данных Informix, и мне нужно будет запустить сценарий Bash из триггера базы данных. В документации informix объясняется, как запустить пользовательскую процедуру, но это должна быть хранимая процедура; Я хотел бы запустить пользовательскую программу, доступную на локальной машине.

1 Ответ

2 голосов
/ 19 ноября 2011

Вы, вероятно, не хотите делать это - потому что запуск программы будет медленным - но если вы решите, что все еще хотите это сделать, то у вас будет триггер, чтобы запустить хранимую процедуру, и хранимая процедура будет использоватьОператор 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, соответствующая состоянию выхода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...