Проблема подключения Linux Apache + PHP к MS SQL Server с использованием WindowsAuth / Kerberos («Нет доступных учетных данных Kerberos») - PullRequest
0 голосов
/ 17 марта 2019

Следующая настройка: у меня есть Linux (Debian) машина в качестве веб-сервера (apache) и MS SQL Server в Windows. Кроме того, я не могу получить пользователя SQL для этого, только аутентификация через AD / Windows Auth.

Я использую Microsoft ODBC Driver и расширение sqlsrv, которое я установил, следуя инструкциям Microsoft.

Я успешно запускаю kinit с основным именем и паролем. Теперь подключение на основе Windows-Auth к серверу MSSQL прекрасно работает при использовании sqlcmd или даже при использовании PHP в интерактивном режиме (php -a) с использованием sqlsrv_connect, но когда я пытаюсь запустить простой пример подключения из php-файла через Apache , это не работает. Я получаю сообщение об ошибке, подобное этому:

Array ( [0] => Array ( [0] => HY000 [SQLSTATE] => HY000 [1] => 851968 [code] => 851968 [2] => [Microsoft][ODBC Driver 17 for SQL Server]SSPI Provider: No Kerberos credentials available (default cache: FILE:/tmp/krb5cc_33) [message] => [Microsoft][ODBC Driver 17 for SQL Server]SSPI Provider: No Kerberos credentials available (default cache: FILE:/tmp/krb5cc_33) ) [1] => Array ( [0] => HY000 [SQLSTATE] => HY000 [1] => 851968 [code] => 851968 [2] => [Microsoft][ODBC Driver 17 for SQL Server]Cannot generate SSPI context [message] => [Microsoft][ODBC Driver 17 for SQL Server]Cannot generate SSPI context ) )

Я знаю, что добавленный кеш _XX обозначает UID, поэтому подумал, что это может быть проблемой, которую я уже экспериментировал с другим пользователем, запрашивающим билет и еще много чего, но я не смог заставить его работать.

Я также пытался использовать unixODBC и определять DSN. Он работает при тестировании с isql и с использованием odbc_connect в интерактивном режиме php (также с python, использующим pyodbc), но не со страницы php.

У кого-нибудь есть идеи о том, что мне не хватает? Это может быть довольно очевидно, но я довольно новичок в этой теме, и не так уж много можно найти в отношении доступа с компьютера под управлением Linux к серверу MS SQL на базе Windows без дополнительного пользователя SQL. Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 17 марта 2019

Я нашел ответ сам, мог бы придумать это раньше, но я оставлю это здесь на тот случай, если кто-то еще наткнется на эту проблему:

Я уже думал, что это что-то связано с доступомправа / разрешения, так как он в основном работал везде, кроме Apache, но я не мог понять почему, пока не узнал, что это вызвано systemd:

В Systemd есть функция, предотвращающая доступ служб к /tmp называется SecureTmp.Отключение этой функции для Apache, как описано здесь для тестирования, решило проблему.Теперь я посмотрю, как я могу сделать это по-другому, так как я не хочу оставлять эту функцию отключенной.Надеюсь, это кому-нибудь пригодится: -)

...