【问题标题】:Connecting through PHP to an SQL Server, using the Windows account使用 Windows 帐户通过 PHP 连接到 SQL Server
【发布时间】:2012-07-17 14:32:00
【问题描述】:

我正在尝试使用 PHP 连接到另一台机器上的 SQL Server。我找到了两种方法来做到这一点。使用 odbc_connect 或 sqlsrvr 连接。

    $connection = odbc_connect("Driver={SQL Server Native Client 10.0};Server=$serverName;Database=$db;", 'user', 'pass');

或

  $conn = sqlsrv_connect($serverName, array('UID' => '', 'PWD' => ''));

如果我尝试连接到 SQL 帐户,则连接有效。不幸的是,我无法使用 Windows 身份验证进行连接。

到目前为止,我已经尝试了以下方法:使用了工作通行证,添加了 Trusted_Connection=yes;或集成安全=SSPI; .我也尝试将它与 fastcgi.impersonate = 1 或 0 结合使用。

当我直接使用我的用户并通过时,我收到一个登录被拒绝错误,当我尝试使用 sspi 进行 Windows 身份验证时,我收到以下错误:用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。

我在谷歌上搜索了很多问题,但找不到解决方案。然而,有些人在谈论 php 不使用网络服务帐户,这可能是问题所在。

有谁知道我该如何解决这个问题或者给我一个领导?

提前谢谢你。

【问题讨论】:

  • 您将使用您的 php 进程(或 webserver 进程)正在运行的 UID 登录。
  • 有什么方法可以改变运行进程的用户吗?我以前没有这样做过,我会很感激“傻瓜”类型的链接。我一直认为在我登录时运行的应用程序是使用我的帐户运行的。
  • 取决于您的网络服务器,但是在更改操作 UID 时需要考虑很多事情 - 除非您操作正确,否则您可能会完全破坏网络服务器。
  • 你有没有链接或者我可以用谷歌搜索的东西?
  • 我终于通过安装 IIS6 和 php 解决了这个问题。我配置 inetmgr 是为了更改默认情况下用于匿名登录的用户。对于其他遇到此问题的人,请点击链接:learn.iis.net/page.aspx/247/…

标签: php sql-server odbc windows-authentication


【解决方案1】:

我能够使用在单独的 IIS 服务器上运行的 PHP 与远程 SQL 服务器建立可信连接:

$connectionInfo = array('Database' => $dbname);
$con = sqlsrv_connect($servername,$connectionInfo);

在 php.ini 中:

fastcgi.impersonate = 0
mssql.secure_connection = On

在我的 PHP 站点的 IIS 中:

Anonymous Authentication = Disabled
Windows Authentication = Enabled
Application Pool settings for site: Integrated, Network Service

$dbname 数据库的 SQL Server 上的数据库安全性:

create login: domainname\iisservername$  
map domainname\iisservername$ to db_datareader privilege for $dbname database

注意:iisservername 中的 $ 很重要。通过上述设置,IIS 将与 SQL 服务器建立信任连接,而无需在 PHP 文件中存储用户 ID 和密码信息。本地应用程序池使用的权限是“网络服务”。远程,这些权限以用户 domainname\iisservername$ 的身份通过网络。

【讨论】:

  • 如何连接appache服务器
【解决方案2】:

基本上问题在于用于连接服务器的身份将始终是运行 PHP 的进程的身份

This 链接可能会对您有所帮助。

【讨论】:

  • 嗨。我已经通过那个帖子了。不幸的是,他提出的解决方案对我不起作用。模拟设置无效,并且用户在尝试使用 windows 身份验证连接时始终保持不变。
【解决方案3】:

对于 IIS 7.5 上的 PHP,无需用户名和密码即可使用 SSPI 身份验证进行连接。我必须执行以下操作:

在我的 IIS 应用程序池高级设置中,我将其设置为使用自定义帐户域\用户名来连接我需要 PHP 连接的用户。

在我的 IIS 特定网站中,我将基本设置更改为以相同的域\用户名连接。

在我的 PHP 代码中,我可以使用 $conn = sqlsrv_connect($dbhost, array("Database" => $dbname, "UID" => "", "PWD" => "")); 进行连接

其他说明:fastcgi.impersonate = 1 我只有:启用匿名身份验证 *

【讨论】:

    【解决方案4】:
    1. 打开 IIS 控制台
    2. 使用所需用户配置您的应用程序池身份,该用户必须在您的 SQL Server+数据库中具有足够的权限
    3. 选择您的“特定网站”
    4. 打开“身份验证”设置
    5. 右键单击“匿名身​​份验证”,然后单击“编辑”
    6. 最后选择选项:应用程序池标识(单选按钮),然后按“确定”按钮应用更改。

    【讨论】:

      【解决方案5】:

      你试过$conn = sqlsrv_connect($serverName);

      数组是可选的。默认使用 Windows 身份验证。看到这个MSDN article

      IIS 应该启用 Windows 身份验证并关闭匿名访问。

      【讨论】:

      • 是的。同样的错误:用户'NT AUTHORITY\ANONYMOUS LOGON'登录失败
      • 如果是这样,匿名访问将设置为 false,Windows 身份验证设置为 true。
      • 目前,Web 服务器实际上是我的笔记本电脑。未配置 IIS。我还没有使用它,但我会尝试安装它,看看会发生什么。谢谢!
      • 是的。这个link 应该会有所帮助。
      【解决方案6】:
      1. 打开 IIS 控制台
      2. 转到您的网站
      3. 打开“身份验证”设置 右键单击“匿名身​​份验证”,然后单击“编辑” 最后选择选项:应用程序池标识(单选按钮),然后按“确定”按钮应用更改。
      4. 转到“应用程序池”并获取应用程序池名称。
      5. 打开SSMS(SQL管理工作室),进入相关数据库,选择“安全”。
      6. 添加一个新用户,只填写名称并保存。用户名应为: IIS APPPOOL\{YOUR_APP_POOL_NAME}

      祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多