Установка выделенного пользователя / пароля для сценариев csh с помощью «db2 connect to table» в Linux 2.6 / IBM DB2 v9.7 - PullRequest
0 голосов
/ 08 декабря 2011

У нас есть много устаревших сценариев csh, которые подключаются к нашей базе данных db2 с помощью команды «db2 connect to <<em> table >». Они НЕ используют "db2 connect to <<em> table > user <<em> user >, используя <<em> password >" явно, поэтому по умолчанию для соединения используется пользователь, выполняющий скрипт .

Мы хотим изменить соединение db2 с учетной записи пользователя, выполняющей сценарий csh, на выделенную учетную запись db2 (называемую «dblegacy»).

Я попытался написать исполняемый файл-обертку, который загружался бы / запускался от имени пользователя root, а затем перед выполнением сценариев csh изменил учетную запись на «dblegacy». Единственная проблема заключается в том, что Linux (ld.so) удаляет переменную среды LD_LIBRARY_PATH из всех скриптов / файлов, загруженных после изменения учетной записи setuid () на «dblegacy». И, конечно же, для сценариев csh требуются общие библиотеки.

Итак, мне нужен способ использования db2 connect to table или использования по умолчанию этой учетной записи dblegacy.

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

Если вы выполняете сценарии как пользователь dblegacy (используя su или sudo), то вам нужно убедиться, что сценарии правильно настраивают среду DB2.

Для csh сценарий должен иметь верхнюю часть сценария (т. Е. Before и команды DB2), которая выглядит примерно так:

# Initialize DB2 environment
source /home/db2inst1/sqllib/db2cshrc

Конкретное расположение этого файла может различаться в зависимости от того, с каким пользователем определен ваш экземпляр DB2. Обычно это может существовать в пользовательском .cshrc, так что это может помочь вам найти правильное местоположение правильного файла db2cshrc.

Как только вы добавите эту строку, вы сможете от имени root запустить ваш скрипт, как:

su - dblegacy -c "/path/to/script.csh"
0 голосов
/ 12 декабря 2011

Это (пока) наш способ решения проблемы ...

Вызов программы: execve ("/ cvt / scripts / cvtwrap", argv [], envp []) где argv [1] - это полный путь к целевому скрипту.

cvtwrap:

#!/bin/csh -fx

alias db2 "db2cvt `which db2`"
source /cvt/scripts/$*

Затем, когда целевой скрипт выполняет db2, он выполняет db2cvt (chmod + s как root), что делает наш setdid для dblegacyаккаунт перед тем, как исполнить настоящий db2.

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