模拟后尝试创建数据库时发生异常

时间:2018-08-29 09:33:03

标签: c# sql entity-framework impersonation

在我的应用程序中,我有一个有关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;集成安全性=真;

能请你帮我吗?

0 个答案:

没有答案