Oracle OCI - ошибка с ORA-12705 при работе от имени другого пользователя - PullRequest
3 голосов
/ 29 сентября 2011

У меня есть приложение C, использующее OCI для связи с базой данных.Я использую метод мгновенного клиента, поэтому нет отдельной установки 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-битов, что затрудняет выяснение, почему это должно быть.Программа не работает в других обстоятельствах без установленного s-бита, так что это не жизнеспособное решение, но, надеюсь, указатель на то, где может быть проблема.

1 Ответ

0 голосов
/ 29 сентября 2011

Предположительно, есть файлы данных Oracle, к которым другие пользователи не имеют доступа. По данным Google, ORA-12705 происходит из-за невозможности доступа к файлам данных NLS (где бы они ни находились) или, возможно, из-за какой-то переменной среды.

...