Исключение при попытке создать базу данных после олицетворения - PullRequest
0 голосов
/ 29 августа 2018

В моем приложении у меня есть пользовательский ввод с учетными данными 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)) ».

Средство просмотра событий показывает "Ошибка входа пользователя MYUSER. Причина: не удалось открыть явно указанное имя базы данных DBNAME. [CLIENT:]"

Я пытался просто создать базу данных как олицетворенный пользователь с этим

        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();
            }
        });

и также отлично работает, так что это не ошибка прав. Моя строка подключения: Источник данных = localhost; Исходный каталог = DBNAME; Интегрированная безопасность = True;

Не могли бы вы мне помочь?

...