实体框架和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=&quot;data source=M35824\MSQL32BIT;initial catalog=UNITY_DB_PROD;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" name="UNITY_DB_PRODEntities" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 

我不想给分辩为“纽约泛欧NT \ NETWORK”在SQL它会帮助,但它不是我需要每一个查询和存储过程必须给exec作为“已连接的用户”

集成安全性 - 如果为false,则在连接中指定用户标识和密码 。如果为true,则使用当前的Windows帐户凭据 进行身份验证。 Source

所以.. 我觉得EF正从ISS这个信息,你需要改变你的页面池。应用程序池标识“MyDomain/MyAcount”...或将其设置为false

如果您需要使用集成身份验证,则需要使用impersonation将您的凭据转发到sql-server或简单地为应用程序池定义另一个帐户。

+0

我不够活跃,我不能downvote,但这个回答直接违反堆栈溢出回答指导方针。具体来说,答案应该详细说明解决方案,而不是仅仅链接到其他地方,因为外部网站可能很容易停下来,重新定位等等。您甚至会链接到顶部有警告标语的文章,声明不会维护此文档。答案应该用自我包含的内容100%解决问题,只有连接到外部来源才能进一步阅读,如果有兴趣的话。 – James

我用它来模仿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; 
     } 

随时提供其他方法。

+0

当您使用Windows集成身份验证时,您可以尝试在您的web.config文件中的下添加。尽管这会使整个应用程序在登录用户帐户下运行。 – lobiZoli