问题:
SQ Server设置,具有一个通用Windows帐户的权限。
客户:
使用EntityFramework的WPF应用程序。
与此类似:
LogonUserEx, DuplicateTokenEx for Impersonation with an ObjectContext in C#
Impersonation failing for database connection
这些都没有明确的解决方案。在尝试了很多不同的选项并且失败后,我去了基础。
使用MSDN示例
创建了一个控制台应用程序http://msdn.microsoft.com/en-us/library/chf6fbt4.aspx
另外,尝试了Simple Impersonation
How do you do Impersonation in .NET?
但是,我不断收到System.StackOverflowException是未处理的异常 {无法计算表达式,因为当前线程处于堆栈溢出状态。}
这一行之后:
bool returnValue = LogonUser(userName, domainName, Console.ReadLine(),
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
out safeTokenHandle);
Console.WriteLine("LogonUser called.");
当我尝试使用LOGON_TYPE
时using (SimpleImpersonation.Impersonation.LogonUser("domain", "user", "password", SimpleImpersonation.LogonType.Network))
{
Console.WriteLine(WindowsIdentity.GetCurrent().Name);
}
LogonType.Network是唯一不提供异常的网络。 它会显示新的用户名。
然而,当我尝试:
using (SimpleImpersonation.Impersonation.LogonUser("domain", "user", "password", SimpleImpersonation.LogonType.Network))
{
Console.WriteLine(WindowsIdentity.GetCurrent().Name); // works as expected , correct user name
try
{
model.MyEntities te = new MyEntities();
model.PMGroup p = te.PMGroups.Where(g => g.ID == 1).FirstOrDefault();
}
catch (Exception e)
{
Console.WriteLine(e.Message + Environment.NewLine + e.InnerException.Message);
}
}
我明白了: 底层提供程序在Open上失败。
用户'NT AUTHORITY \ ANONYMOUS LOGON'登录失败。
我希望以新用户身份连接而不是匿名。
更新
如果项目目标是.Net3.5或更低版本,则模拟有效。 它不适用于.Net 4和.Net 4.5
也许我正在接近这个问题。如果您有任何想法或建议,请分享。
由于