В моем приложении у меня есть пользовательский ввод с учетными данными 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;
Не могли бы вы мне помочь?