Ошибка подключения Freetds SQL Server из PHP: разрешения?

У меня есть PHP-скрипт, который подключается к удаленному SQL-серверу. Из командной строки от имени пользователя root я могу вызвать команду freetds: tsql –H имя хоста –U имя пользователя, и она отлично подключается, и я могу выполнять запросы.

У меня есть PHP-скрипт в /var/www/html/axis/public/test.php. Когда я: sudo –u apache –s (меняю пользователя с root на apache), а затем запускаю PHP-скрипт из командной строки, он подключается и выполняет запросы просто отлично. Но при выполнении того же скрипта из веб-браузера происходит сбой - браузер возвращает ошибку подключения к БД. Веб-браузер может подключаться везде, где это предполагается, и отображает все веб-страницы, которым не требуется соединение SQL.

apache — это пользователь, который запускает httpd. Я подтвердил это через: ps aux | grep апач

Любые идеи относительно того, почему apache может нормально выполнять PHP-скрипт из командной строки, но когда браузер пытается подключиться к тому же самому скрипту, он терпит неудачу?

Спасибо, Деррик


person Derrick    schedule 07.09.2011    source источник


Ответы (2)


Согласно часто задаваемым вопросам FreeTDS:

http://www.freetds.org/faq.html#php

Также вы можете опубликовать свой код подключения и какую именно ошибку вы получаете?

person Rick Kukiela    schedule 07.09.2011
comment
Да, я читал это. Как отмечалось выше, я сменил пользователя на apache и отлично выполнил PHP-скрипт из командной строки. Разве это не то же самое, что прямое выполнение того же скрипта из браузера? Строка подключения, скорее всего, не так важна, потому что PHP-скрипт запускается как apache, а не из браузера. Они оба выполняют один и тот же скрипт. Ошибка: SQLSTATE[HY000] Невозможно подключиться: Adaptive Server недоступен или не существует (уровень серьезности 9). - person Derrick; 07.09.2011

Значит проблема была с SELinux. Веб-серверу было запрещено подключение вне сети (к SQL Server). Мне пришлось запустить эту команду:

/usr/sbin/setsebool -P httpd_can_network_connect_db 1

Как только это было сделано, все было хорошо. Этот ответ был предоставлен с помощью Даниэля Фазекаса. Спасибо всем за то, что рассмотрели этот вопрос вместе со мной.

person Derrick    schedule 07.09.2011