Oracle OCI - 以另一个用户身份运行时无法使用ORA-12705

时间:2011-09-29 09:42:36

标签: c oracle unix oci instantclient

我有一个使用OCI与数据库通信的C应用程序。我正在使用即时客户端方法,因此服务器上没有独立的Oracle安装 - 只有几个应用程序链接的库。

通常,应用程序以用户dai运行,一切正常。但是,如果应用程序作为另一个用户运行(在组dai中),则无法运行,报告:

Error while trying to retrieve text for error ORA-12705

所以我可以想象这是一个权限错误,但我不确定它试图访问哪些文件。 Oracle库的权限是

dai:/dai/oracle/lib> ls -l
total 201872
-rwxrwxrwx   1 dai      dai        24719097 16 Feb 2009  libclntsh.a
-rwxrwxrwx   1 dai      dai         5972457 16 Feb 2009  libocci.a
-rwxrwxrwx   1 dai      dai        72651344 04 Jun 2010  libociei.so

您可以猜测主OCI库是静态链接的,但是有一个动态链接库(不确定原因,但AIX instantclient包附带了这些文件......)。我的LIBPATH看起来没问题:

LIBPATH=/dai/oracle/lib

我需要检查哪些其他权限?

编辑:我刚刚尝试运行truss(AIX相当于Linux strace)来查看发生了什么。当作为dai用户运行时,我无法看到它读取任何意外的文件。 Truss似乎在跟踪set-uid程序时遇到了问题 - 对C应用程序的权限设置如下:

dai:/dai/bin> ls -l stats_backup
-rwsrwsr-x   1 dai      dai         6173358 Aug 12 10:08 stats_backup

所以我做了chmod a-s并再次尝试,它现在有效!

所以程序在没有s位的情况下运行正常,但是一旦我把它放回去,它就会再次中断。我无法使用s位设置运行truss,这使得很难找出原因。如果没有s位设置,该程序在其他情况下不起作用,因此这不是一个可行的解决方案,但希望指向问题所在的指针。

1 个答案:

答案 0 :(得分:0)

可能有一些Oracle数据文件位于您的其他用户无法访问的位置。发生According to Google, ORA-12705因为无法访问NLS数据文件(无论它们在哪里),或者可能存在一些环境变量问题。