0

我们有许多遗留的 csh 脚本,它们使用“db2 connect to < table >”命令连接到我们的 db2 数据库。他们没有明确使用“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用户身份执行脚本(使用susudo),那么您需要确保脚本正确设置 DB2 环境。

对于 csh,脚本应该在脚本顶部附近(即 before 和 DB2 命令)看起来类似于以下内容:

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

该文件的具体位置可能会因定义 DB2 实例的用户而异。通常这将存在于用户的.cshrc.db 文件中,这样可以帮助您找到正确的 db2cshrc 文件的正确位置。

添加完这一行后,您应该能够以 root 身份运行您的脚本,如下所示:

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

这(到目前为止)似乎是我们解决问题的方法......

调用程序: execve("/cvt/scripts/cvtwrap", argv[], envp[]) 其中 argv[1] 是目标脚本的完整路径。

简历包装:

#!/bin/csh -fx

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

然后,每当目标脚本执行 db2 时,它都会执行 db2cvt(chmod +s 作为 root),它会在执行真正的 db2 之前将我们的 setuid 设置为 dblegacy 帐户。

于 2011-12-12T19:11:28.883 回答