Подключиться к SQL SERVER 2008 (с использованием проверки подлинности Windows) через PHP в IIS7? - PullRequest
2 голосов
/ 16 февраля 2012

Мне нужно подключиться к Sql Server 2008, используя аутентификацию Windows из кода PHP, передавая имя пользователя и пароль, как мы делаем, когда мы подключаемся к Sql Server с аутентификацией SQL.Мне нужно аутентифицировать пользователя на основе имени / пароля аутентификации Windows.

Когда я использовал аутентификацию SQL, я смог подключиться, создав системный DSN с именем DBconnect в инструменте настройки источника данных (ODBC).Тогда я мог бы успешно проверить идентификатор входа с помощью проверки подлинности SQL Server и подключиться к базе данных, используя идентификатор входа и пароль, введенные пользователем с таким кодом php:

$con = odbc_connect("DBconnect", "sql_user", "sql_password");

Теперь мне нужно сделать то же самое, когда SQLСервер использует проверку подлинности Windows.Я хочу создать системный DSN с именем DBConnect_NT в инструменте настройки источника данных (ODBC) и настроить его для проверки подлинности идентификатора входа с помощью аутентификации Windows с использованием идентификатора входа в сеть.

У меня есть этот код:

$con = odbc_connect("DBconnect_NT", "windows_user", "windows_pass");

Но это не работает.Я получаю эту ошибку:

Ошибка при подготовке / выполнении запроса.28000

Я изменил некоторые настройки в разделе «Проверка подлинности» IIS7 Manager

Windows Authentication = Enabled
Anonymous Authentication = Disabled

Теперь я могу использовать этот код:

$con = odbc_connect("DBconnect_NT", "", ""); 

и вижувсплывающее окно, предлагающее мне войти.Когда я набираю имя пользователя и пароль, он подключается и, следовательно, позволяет мне выполнять другие запросы, используя тот же $con объект подключения.

К сожалению, я не могу аутентифицировать пользователя для веб-сайта на основе этого подхода,Когда я ввожу неправильное имя пользователя и пароль во всплывающем окне, оно не дает ответа (всплывающее окно появляется снова).Если я отменю всплывающее окно, появится сообщение об ошибке 401:

401 - неавторизовано: доступ запрещен из-за неверных учетных данных.

Использую ли я правильный способ подключенияк SQL Server через проверку подлинности Windows?Есть ли другой возможный способ подключения к SQL Server путем динамической передачи имени пользователя и пароля для проверки подлинности Windows?

Я также пытался использовать LDAP для проверки подлинности в Active Directory, но он не работает.

IЯ использую SQL SERVER 2008, IIS7 и PHP5.3 на машине Amazon EC2.

Это гибкое приложение, которое я создаю с использованием http://example.net/Webservice/connect.php.Flex динамически передает имя пользователя / пароль в это всплывающее окно из формы и, следовательно, подключается.Но когда введено неправильное имя пользователя / пароль, всплывающее окно трудно обрабатывать.Он возвращается постоянно, и приложение flex зависает.

Если возможно получить код ошибки, когда во всплывающем окне введено неправильное имя пользователя / пароль, это может решить проблему.Другой способ подключения SQL Server с использованием аутентификации Windows и прямой передачи имени пользователя и пароля также решил бы мою проблему.

Ответы [ 2 ]

0 голосов
/ 24 марта 2018

Когда вы используете проверку подлинности Windows, Sql Server вообще не видит вашего имени пользователя или пароля. Остановитесь и прочитайте это предложение еще раз, потому что это очень важно понять.

Чтобы проверка подлинности Windows работала, сначала необходимо выполнить аутентификацию напрямую с помощью контроллера домена Active Directory (DC). После успешного входа в систему DC выдаст маркер безопасности для вашего сеанса. Именно этот токен вы предоставляете для работы аутентификации Sql Server Windows, а не вашего имени пользователя или пароля. Sql Server только проверяет токен.

Вот почему методы LDAP не работают. LDAP предоставляет только ответ «да / нет» из Active Directory. LDAP не предоставляет требуемый токен безопасности. Думайте об этом как о Windows, эквивалентной использованию проверки подлинности сертификата на сервере Linux. Кроме того, этот токен связан с процессом , устанавливающим соединение. Это не свойство, которое вы можете просто установить для объекта подключения. Это средство безопасности, которое затрудняет кражу или похищение токенов.

Это создает проблемы на веб-сайте, где вам нужен способ хранения и управления токеном для каждого пользователя сайта, а также присоединения его к процессу вашего веб-сервера. IIS предоставляет механизм для этого, называемый Олицетворение . Первоначально он был построен для ASP.Net, но, похоже, FastCGI поддерживает его через fastcgi.impersonate, установив php.ini файл .

Вам также нужен способ подключения к БД на общедоступных страницах предварительной аутентификации и способ подключения аутентификации к учетной записи Active Directory, что ограничит доступные вам механизмы аутентификации. Я не являюсь обычным пользователем PHP и не знаю, как ваша среда AD связана с вашим экземпляром веб-сервера EC2, это насколько я могу вам представить.

0 голосов
/ 16 февраля 2012

Чтобы использовать проверку подлинности Windows для сервера SQL, вы не указываете имя пользователя и пароль. Вместо этого вы изменяете строку подключения для интегрированной безопасности, как в:

Connection string = "Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;"

или вариант для доверенных соединений:

Connection string = "Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;"

Или, если вы используете ODBC DSN, пропустите имена пользователей и пароль аналогичным образом.

Кроме того, вы должны понимать, что подключение пользователя Windows к БД в этой ситуации - это учетная запись IIS, на которой работает ваш сайт . Аутентификацией Windows, которую вы делали, была бы локальная интрасеть: все ваши пользователи являются частью домена Windows или доверяют ему.

Если при поиске здесь IIS PHP и SQL-сервера вы получите некоторую информацию, которая может оказаться полезной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...