【发布时间】:2012-03-07 07:47:34
【问题描述】:
我需要使用来自 PHP 代码的 Windows 身份验证连接到 Sql Server 2008,方法是传递用户名和密码,就像我们使用 SQL 身份验证连接到 Sql Server 时所做的那样。我需要根据 Windows Authentication 的 User/Password 对用户进行身份验证。
当我使用 SQL 身份验证时,我能够通过在数据源 (ODBC) 配置工具中创建一个名为 DBconnect 的系统 DSN 进行连接。然后我可以通过 SQL Server 身份验证成功验证登录 ID,并使用用户使用此 php 代码输入的登录 ID 和密码连接到数据库:
$con = odbc_connect("DBconnect", "sql_user", "sql_password");
现在,当 SQL Server 使用 Windows 身份验证时,我需要做同样的事情。
我想在数据源 (ODBC) 配置工具中创建一个名为 DBConnect_NT 的系统 DSN,并将其设置为使用网络登录 ID 通过 Windows 身份验证验证登录 ID 的真实性。
我有这个代码:
$con = odbc_connect("DBconnect_NT", "windows_user", "windows_pass");
但它不起作用。我收到此错误:
查询准备/执行出错。 28000
我在 IIS7 管理器的身份验证部分更改了一些设置
Windows Authentication = Enabled
Anonymous Authentication = Disabled
现在我可以使用这段代码了:
$con = odbc_connect("DBconnect_NT", "", "");
我看到一个弹出窗口提示我登录。当我输入用户名和密码时,它会连接,因此允许我使用相同的 $con 连接对象进行其他查询。
很遗憾,我无法根据这种方法对网站的用户进行身份验证。当我在弹出窗口中输入错误的用户名和密码时,它没有响应(弹出窗口再次出现)。如果我取消弹出窗口,它将显示此 401 错误:
401 - 未经授权:由于凭据无效,访问被拒绝。
我是否使用正确的方式通过 Windows 身份验证连接到 SQL Server? 是否有其他可能的方式通过动态传递 Windows 身份验证用户名和密码来连接 SQL Server?
我也尝试使用 LDAP 对 Active Directory 进行身份验证,但它不起作用。
我在 Amazon EC2 机器上使用 SQL SERVER 2008、IIS7 和 PHP5.3。
这是针对我正在使用 http://example.net/Webservice/connect.php 构建的 flex 应用程序。 Flex 动态地将用户名/密码从表单传递到此弹出窗口并因此连接。但是,当提供错误的用户名/密码时,弹出窗口很难处理。它不断返回,flex 应用程序挂起。
如果在弹出窗口中输入错误的用户名/密码时可能会收到错误代码,则可能会解决问题。使用 Windows 身份验证连接 SQL Server 并直接传递用户名/密码的其他一些方法也可以解决我的问题。
【问题讨论】:
-
我一直无法通过 Windows 身份验证通过传入 Windows 用户/密码连接到 SQL Server。您需要在活动目录上作为该用户进行预身份验证,然后在没有用户/密码的情况下登录。您是从 Windows 平台还是其他平台连接?您也可以尝试以 SQL 用户身份连接,然后使用
EXECUTE AS更改为其他用户:msdn.microsoft.com/en-us/library/ms181362.aspx -
如果我理解正确,Windows 身份验证工作正常,只是当输入错误的登录名时,您无法在 Web 应用程序中处理?所以基本上 SQL Server 连接不是问题,它可以让您的特定 Web 开发平台捕获和管理不正确的登录
标签: php sql-server-2008 iis-7 windows-authentication