[英]Entity Framework Windows Authentication with ASP.NET Impersonation
我有一个使用模拟的ASP.NET应用程序。 我的ConnectionStrings
是使用EntityConnectionStringBuilder
动态生成的。
当我使用SQL Server Authentication
但通过使用Trusted_Connection=Yes;
替换用户ID和密码使用Windows Authentication
时,它可以正常工作Trusted_Connection=Yes;
我收到一条错误消息,指出“ System.Data.SqlClient.SqlException(0x80131904):无法打开登录请求的数据库“ DB_Name
”。登录失败。用户' DomainName\\MachineName$
'的登录失败。
看来Entity Framework使用的是内置用户帐户( MachineName$
),而不是模拟用户' DomainName\\User1
'。
如何配置EF以使用模拟用户帐户进行Windows身份验证?
您没有在使用模拟。 如果是这样,那将是可行的(假设您的数据库已正确配置为允许模拟用户访问)。
EF未使用“内置”帐户。 它正在使用在其上运行工作进程的任何帐户,在大多数情况下,该帐户将是应用程序池标识或网络服务,两者均使用计算机的Active Directory帐户作为凭据。
换句话说,EF使用任何告诉它使用的连接字符串,如果您告诉它使用受信任的连接,则它使用正在运行的进程/线程。
实际上,在集成管道模式下运行时,IIS7或更高版本不支持模拟。 这样做的原因是IIS7与.NET的联系更为牢固,并支持异步处理程序。 异步处理程序存在模拟问题,因为启动处理程序的线程可能与放弃异步处理线程后恢复异步请求的线程与恢复处理程序的线程不同。
通常,除非您有非常特定的用例,否则您可能不应该设计架构来要求模拟,因为这会产生很多影响。
如果您需要与特定用户一起使用资源,则可以使用WindowsIdentity主体并以这种方式模拟,但这必须在一个小块(网络调用本身)的范围内完成。
我不确定您是如何尝试进行模拟的,但显然无法正常工作。 在大多数情况下,如果您尝试在IIS7 +上模拟,应该会出现错误,因此问题实际上是……是什么让您认为您正在使用模拟?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.