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