Как переключить пользователя в сценарии оболочки AIX?

Я хочу запустить запрос DB2 из сценария оболочки. У меня есть пользователь db2inst1, который требуется для выполнения операторов DB2. Я запускаю приложение, которое использует пользователя root для запуска сценария оболочки. ЗДЕСЬ, если я переключу пользователя на db2inst1. Я могу сделать работу.

Ниже приведен мой сценарий, который отлично работает с db2inst1.

#!/bin/sh
db2 "connect to customerdb"
db2 "set schema = db2inst1"
db2 "insert into tbl_customer(name,occupation) values ('Alex','Admin')"

Смотрите, как корень должен запустить его. Таким образом, пользователь root позволит сценарию сначала сменить пользователя, прежде чем выполнять команды db.

Мое приложение вызовет этот сценарий оболочки, который будет использовать пользователя root.

Как я могу переключить пользователя в скрипте? Я новичок в сценариях оболочки.


person Tahir Akram    schedule 20.02.2013    source источник


Ответы (1)


Поскольку вы работаете как root, вы можете использовать:

su dbinst1 -c './your_script arg1 arg2 ...'

Если бы ты не бежал как root, жизнь была бы тяжелее.

person Jonathan Leffler    schedule 20.02.2013
comment
Мое приложение будет вызывать этот сценарий оболочки, который использует пользователя root. Я хочу, чтобы все было в сценарии. Я пытался: su db2inst1 -c 'db2 CONNECT TO customerdb USER db2inst1 USING admin; db2 -c -i - w -td@ -f /u01/IBM/workspace/addcustomer.sql', но получил ksh: db2: not found. - person Tahir Akram; 20.02.2013
comment
Возможно, среда установлена ​​неправильно; в частности, $PATH может быть (пере)установлено на значение по умолчанию, которое не включает, где установлена ​​команда db2. Возможно, вам также потребуется установить некоторые другие переменные среды. Это будет сделано внутри файла yourscript — как бы вы его ни назвали. Либо это будет выписано массивной многострочной командой, но обычно удобнее запускать скрипт. - person Jonathan Leffler; 20.02.2013
comment
Добавление su - dbinst1 -c к каждому оператору в скрипте сделало свое дело. Теперь мой сценарий: su - db2inst1 -c 'db2 connect to customeradb user db2inst1 using admin' su - db2inst1 -c 'db2 -tvsf /u01/IBM/workspace/addcustomer.sql' - person Tahir Akram; 20.02.2013
comment
Я не уверен, почему вам нужно быть root, а затем использовать su для выполнения скрипта от имени другого пользователя. Это делает вещи излишне сложными. Почему бы просто не предоставить доступ INSERT в таблицу для идентификатора, который выполняет скрипт (т.е. идентификатор, который запускает приложение? - person Ian Bjorhovde; 20.02.2013