Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 哪个用户用于到SQL Server的受信任连接-IIS/ASP.NET_Sql Server_Iis_Iis 7.5_Sql Server 2014_Windows Authentication - Fatal编程技术网

Sql server 哪个用户用于到SQL Server的受信任连接-IIS/ASP.NET

Sql server 哪个用户用于到SQL Server的受信任连接-IIS/ASP.NET,sql-server,iis,iis-7.5,sql-server-2014,windows-authentication,Sql Server,Iis,Iis 7.5,Sql Server 2014,Windows Authentication,先来点背景知识。我有一个ASP.NET应用程序,它位于我们网络上的DMZ中。它需要访问位于受信任网络中的计算机上的SQL Server实例。我将调用web服务器WebServer1和示例SQLServerSqlServer1 目前,我们的web服务器正在使用包含用户ID和密码的连接字符串。这并不理想,我们希望使用Windows身份验证来连接数据库 为此,我在我们的域上设置了一个用户帐户和密码,我将其称为MyDomain\WebApp。我将站点的应用程序池的标识设置为此新帐户,并将站点的匿名身份验

先来点背景知识。我有一个ASP.NET应用程序,它位于我们网络上的DMZ中。它需要访问位于受信任网络中的计算机上的SQL Server实例。我将调用web服务器
WebServer1
和示例SQLServer
SqlServer1

目前,我们的web服务器正在使用包含用户ID和密码的连接字符串。这并不理想,我们希望使用Windows身份验证来连接数据库

为此,我在我们的域上设置了一个用户帐户和密码,我将其称为
MyDomain\WebApp
。我将站点的应用程序池的标识设置为此新帐户,并将站点的匿名身份验证设置为使用应用程序池的标识

但是,当我尝试更改连接字符串时,将
UserID=fakeuser,Password=fakepass
替换为
Trusted\u connection=Yes
,从web应用程序启动数据库调用会导致错误消息

登录失败。登录名来自不受信任的域,不能与Windows身份验证一起使用

编辑:以下是SQL Server错误日志中的完整错误消息:

建立集成安全连接时,SSPI握手失败,错误代码为0x8009030c,状态14;连接已关闭。原因:AcceptSecurityContext失败。Windows错误代码指示故障原因。登录尝试失败[客户端:]

错误:18452,严重性:14,状态:1

登录失败。登录名来自不受信任的域,不能与Windows身份验证一起使用。[客户:]

为了了解发生了什么,我想我应该设置一个简单的页面,告诉我当前用户在worker进程上是什么。这就是我遇到非常奇怪结果的地方。以下是结果及其提供给它们的服务器变量(用上面提到的名称替换实名)

  • WebServer1\WebApp=
    WindowsIdentity.GetCurrent().Name
  • WebApp=
    Environment.UserName
  • MyDomain\WebApp=
    pool.ProcessModel.UserName
  • WebServer1\WebApp=
    Request.LogonUserIdentity.Name
  • 1和4非常奇怪,在web服务器上不作为用户帐户存在。只有#3返回了在站点的IIS应用程序池中看到的正确值。这是使用以下答案注释中的方法获得的:


    我的假设是,当服务器尝试使用SQL server实例进行身份验证时,实际使用的不是帐户,并且正在使用其他值之一,导致出现上述错误消息。

    有一篇关于此问题的好文章。简言之:

    您需要回答两个主要问题:

  • IIS的身份验证模式是什么?(匿名身份验证?Windows身份验证?两者皆有?)

  • FastCGI
    模块
    的模拟是打开的
    还是关闭的?(即,我的
    php.ini
    文件中的
    fastcgi.impersonate
    设置是否设置为
    0
    1
    ?)

  • A.IIS匿名身份验证已启用且
    fastcgi.impersonate=1

    因为我是匿名连接到IIS的,所以内置的匿名 帐户(在IIS 7.0中默认为
    NT AUTHORITY\IUSER
    )为 冒充的。因此,我的连接尝试失败,因为此标识 未映射到我的服务器上的有效登录名

    B.IIS匿名身份验证已启用且
    fastcgi.impersonate=0

    因为模拟已关闭,所以我的身份未被用作 PHP进程的标识。而是PHP的实际标识 连接尝试中使用了进程。在IIS 7.5中,标识 PHP进程的性能取决于应用程序池的标识 他正在跑步。在本例中,PHP位于默认应用程序池中 并且连接尝试中使用的标识是
    IIS APPPOOL\DefaultAppPool
    (因此我的连接尝试失败)

    C.IIS Windows身份验证已启用且
    fastcgi.impersonate=1

    启用Windows身份验证(和匿名身份验证) 已禁用),我使用Web浏览器提供的标识连接到IIS 正在(
    Microsoft\brian.swan
    )下运行,该身份是我登录的 与)。并且,在启用模拟的情况下,PHP进程在
    Microsoft\brian.swan
    identity。既然这个身份映射到了 在我的服务器上有效登录,我的连接尝试成功

    D.IIS Windows身份验证已启用且
    fastcgi.impersonate=0

    这里的结果与匿名身份验证的结果相同 已启用且
    fastcgi.impersonate=
    0(连接尝试失败)。 唯一的区别是当我从网上请求页面时 服务器:当我请求时,一个弹出窗口询问我的身份 页面

    E.同时启用匿名和Windows身份验证:

    Web浏览器将尝试使用匿名访问Web服务器 首先是身份验证。因此,如果同时使用匿名和Windows身份验证 如果两者都已启用,则结果将与上面的结果相同,其中 已启用匿名身份验证(A和B)


    检查您的IIS“匿名身份验证”设置,并确保它设置为“使用应用程序池标识”-IIS和ASP.NET进行身份模拟。您的应用程序使用什么身份验证系统?您是使用自己的身份验证数据库,还是使用Windows身份验证(在ASP.NET中-与SQL Server无关)?如果是这样,您可能遇到了一个难题:让web应用程序中的Windows身份验证