用户登录失败' ...'在ASP.NET WebAPI中

时间:2016-03-14 08:46:59

标签: asp.net sql-server iis asp.net-web-api

客户端应用程序和sql server实例位于不同的计算机上。我正在使用Entity Framework并为数据库创建了数据模型。本地应用程序适用于数据库。但是在IIS上部署应用程序后,我无法访问数据库。我收到错误消息:

  

底层提供程序在Open上失败。

     

用户' domain \ account'登录失败。

在WebAPI的Web.config中,connectionString的定义如下:

<system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <authentication mode="Windows" />
</system.web>
<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
</entityFramework>
<connectionStrings>
    <add name="QuReContext" connectionString="metadata=res://*/Models.QuReModel.csdl|res://*/Models.QuReModel.ssdl|res://*/Models.QuReModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=spartak,2500;initial catalog=First_DB;User Id=domain\account;Password=MyPW;MultipleActiveResultSets=True;&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

我已经尝试过stackoverflow中的多种解决方案。但没有任何帮助。我在Windows Server 2008 R2和SQL Server 2014的远程Web服务器上使用ASP.NET WebAPI 2,Entity Framework 6,IIS 7.5,我的域帐户被定义用于访问数据库。此域帐户我已在Web.config的连接字符串中写入。

在IIS上创建默认网站&#34; MyClientApp&#34;在这个应用程序中是一个额外的应用程序&#34; RestApi&#34;可用。应用程序池的定义如下:身份:ApplicationPoolIdentity,托管管道模式:集成,在应用程序的身份验证和#34; RestApi&#34;只是Windows身份验证和基本身份验证启用。

有人有想法吗?

1 个答案:

答案 0 :(得分:0)

您可以设置SQL Server以支持两种身份验证模式:

  • 集成(Windows)安全性
  • 混合(Windows + SQL Server登录)

第一种模式使用当前用户凭据尝试登录SQL Server。在这种情况下,凭据是运行ASP.NET应用程序的进程中的凭据,换句话说,是应用程序池用户。要指定此类登录,您需要将其包含在连接字符串中:Integrated Security=SSPI。 (我在一些场合看到,除了指定集成安全性之外,人们指定用户和密码,但我不确定你是否可以覆盖当前的用户凭据。事实上,我认为这只能用于Windows CE)。

第二种模式支持集成安全性以及SQL Server登录,其中用户和密码由SQL Server本身管理,与Windows用户和密码无关。要验证SQL Server登录,您必须在查询字符串中指定用户ID和密码:User Id=myUsername; Password=myPassword;

您应该阅读有关已整合和mixed security mode in SQL Server的信息。这是一个很老的信息,但仍然适用。