在我的应用程序中,我有一个有关Windows凭据的用户输入。使用这些凭据,我可以模拟用户以便首先使用实体框架代码创建数据库。
if (isSqlAuthentication)
{
using (var context = new RetDbContext.RetContext(data.RetDbConnectionString))
{
context.Database.CreateIfNotExists();
}
}
else //impersonate user
{
Impersonation.RunAsUser(credentials, LogonType.Network, () =>
{
var id = WindowsIdentity.GetCurrent();
var context = new RetDbContext.RetContext(data.RetDbConnectionString);
context.Database.CreateIfNotExists();
context.Dispose();
});
}
通过sql身份验证,一切正常。但是,如果我尝试使用Windows身份验证,则会收到异常“ 提供者未返回ProviderManifest实例。”,内部异常为“ 灾难性失败(HRESULT的异常:0x8000FFFF(E_UNEXPECTED))” < / strong>”。
事件查看器显示“用户MYUSER登录失败。原因:无法打开显式指定的数据库DBNAME。[客户端:]”
我试图以此作为模拟用户来创建数据库
Impersonation.RunAsUser(credentials, LogonType.Network, () =>
{
string queryString = "CREATE DATABASE testdb;";
string connectionString = data.RetDbConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
connection.Open();
command.ExecuteNonQuery();
}
});
并且也可以正常工作,因此它不是权限错误。我的连接字符串是:数据源=本地主机;初始目录= DBNAME;集成安全性=真;
能请你帮我吗?