客户端应用程序和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="data source=spartak,2500;initial catalog=First_DB;User Id=domain\account;Password=MyPW;MultipleActiveResultSets=True;"" 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身份验证和基本身份验证启用。
有人有想法吗?
答案 0 :(得分:0)
您可以设置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的信息。这是一个很老的信息,但仍然适用。