0

「db2 connect to < table >」コマンドを使用して db2 データベースに接続する従来の csh スクリプトが多数あります。「db2 connect to < table > user < user > using < password >」を明示的に使用しないため、接続はスクリプトを実行しているユーザーにデフォルト設定されます。

db2 接続を、csh スクリプトを実行しているユーザー アカウントから専用の db2 アカウント (「dblegacy」と呼ばれる) に変更したいと考えています。

rootとしてロード/実行し、cshスクリプトを実行する前にアカウントを「dblegacy」に変更するラッパー実行可能ファイルを作成しようとしました。唯一の問題は、Linux (ld.so) が setuid() アカウントを「dblegacy」に変更した後にロードされたすべてのスクリプト/ファイルから LD_LIBRARY_PATH 環境変数を削除することです。もちろん、csh スクリプトには共有ライブラリが必要です。

したがって、「db2 connect to table」でこの「dblegacy」アカウントを使用またはデフォルトにする方法が必要です。

4

2 に答える 2

1

dblegacyユーザーとして (suまたはを使用して)スクリプトを実行している場合はsudo、スクリプトが DB2 環境を正しくセットアップしていることを確認する必要があります。

csh の場合、スクリプトは次のようなスクリプト (つまり、DB2 コマンドの前) の上部近くにある必要があります。

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

このファイルの特定の場所は、DB2 インスタンスが定義されているユーザーによって異なる場合があります。通常、これはユーザーの.cshrcに存在するため、正しい db2cshrc ファイルの適切な場所を見つけるのに役立ちます。

この行を追加したら、root として次のようにスクリプトを実行できるはずです。

su - dblegacy -c "/path/to/script.csh"
于 2011-12-08T17:24:13.603 に答える
0

これは(これまでのところ)問題を回避する方法のようです...

プログラムの呼び出し:execve( "/ cvt / scripts / cvtwrap"、argv []、envp [])ここで、argv[1]はターゲットスクリプトへのフルパスです。

cvtwrap:

#!/bin/csh -fx

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

次に、ターゲットスクリプトがdb2を実行するたびに、実際のdb2を実行する前にdblegacyアカウントにsetuidを実行するdb2cvt(ルートとしてchmod + s)を実行します。

于 2011-12-12T19:11:28.883 に答える