实体框架和IIS的Windows身份验证
在IIS上发布默认的Visual Studio ASP站点一切都很好。实体框架和IIS的Windows身份验证
我设置了窗口autentification结束了一些努力在顶部rigth角我得到了欢迎MyDomain/MyAcount !.
酷!
后来我有一个简单的EF查询代码(它在本地工作我得到的结果) MyDomain/MyAcount作为SQL窗口帐户存在一切正常。
的probleme是当应用程序池EF不要使用显示顶部分辩角落当前用户“MYDOMAIN/MyAcount”,但使用的池用户帐户“纽约泛欧NT \ NETWORK”
,它抛出一个在包含EF查询的页面上出现很好的自动化错误。
这里我EF连接字符串:
<connectionStrings>
<add connectionString="metadata=res://*/Models.Model1.csdl|res://*/Models.Model1.ssdl|res://*/Models.Model1.msl;provider=System.Data.SqlClient;provider connection string="data source=M35824\MSQL32BIT;initial catalog=UNITY_DB_PROD;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework"" name="UNITY_DB_PRODEntities" providerName="System.Data.EntityClient" />
</connectionStrings>
我不想给分辩为“纽约泛欧NT \ NETWORK”在SQL它会帮助,但它不是我需要每一个查询和存储过程必须给exec作为“已连接的用户”
集成安全性 - 如果为false,则在连接中指定用户标识和密码 。如果为true,则使用当前的Windows帐户凭据 进行身份验证。 Source
所以.. 我觉得EF正从ISS这个信息,你需要改变你的页面池。应用程序池标识“MyDomain/MyAcount”...或将其设置为false
我用它来模仿finaly不知道它是否是这样做的好方法,但至少它按预期工作没有成功尝试模拟连接字符串。
public static List<List<string>> GetCountryData()
{
List<List<string>> DataRows = null;
using (((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate())
{
using (var dbContext = new UNITY_DB_PRODEntities())
{
DataRows = dbContext.final_full_data.Where(x => x.computername.Contains("m570")).Select(x => new List<string> { x.computername, x.DCAI_CENTRE, x.AD_CN }).AsEnumerable().ToList();
}
}
return DataRows;
}
随时提供其他方法。
当您使用Windows集成身份验证时,您可以尝试在您的web.config文件中的
我不够活跃,我不能downvote,但这个回答直接违反堆栈溢出回答指导方针。具体来说,答案应该详细说明解决方案,而不是仅仅链接到其他地方,因为外部网站可能很容易停下来,重新定位等等。您甚至会链接到顶部有警告标语的文章,声明不会维护此文档。答案应该用自我包含的内容100%解决问题,只有连接到外部来源才能进一步阅读,如果有兴趣的话。 – James