Как исправить System.Data.SqlClient.SqlException: «Ошибка входа для пользователя« xx \ xxxx $ »» - PullRequest
0 голосов
/ 23 апреля 2019

Я запустил веб-приложение на IIS и получил

System.Data.SqlClient.SqlException: "Login failed for user'domain\account$'".

Это исключение, когда функция DbMigrator.Update () называется

private readonly DbMigrationsConfiguration<MyContext> _config;
public ContextInitializer(string connectionString)
{
    _config = new Configuration()
    {
        TargetDatabase = new DbConnectionInfo(connectionString, "System.Data.SqlClient")
    };
}
...

public void InitializeDatabase(MgmtStudioContext context)
{
    var migrator = new DbMigrator(_config);
    migrator.Update();
}

А вот трассировка стека:

at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)\r\n   
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)\r\n  
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)\r\n  
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)\r\n   
at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)\r\n   
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)\r\n   
at System.Data.SqlClient.SqlConnection.Open()\r\n   
at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext](TTarget target, Action`2 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed)\r\n   
at System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.Open(DbConnection connection, DbInterceptionContext interceptionContext)\r\n   
at System.Data.Entity.SqlServer.SqlProviderServices.<>c__DisplayClass33.<UsingConnection>b__32()\r\n   
at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.<Execute>b__0()\r\n   
at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)\r\n   
at System.Data.Entity.SqlServer.SqlProviderServices.UsingMasterConnection(DbConnection sqlConnection, Action`1 act)\r\n   
at System.Data.Entity.SqlServer.SqlProviderServices.CreateDatabaseFromScript(Nullable`1 commandTimeout, DbConnection sqlConnection, String createDatabaseScript)\r\n   
at System.Data.Entity.SqlServer.SqlProviderServices.DbCreateDatabase(DbConnection connection, Nullable`1 commandTimeout, StoreItemCollection storeItemCollection)\r\n   
at System.Data.Entity.Migrations.Utilities.DatabaseCreator.Create(DbConnection connection)\r\n   
at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)\r\n   
at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)\r\n   at 

Вот моя строка подключения:

Data Source=(local);Initial Catalog=myTable; Integrated Security=True;

Код отлично работает на другой машине, но на моем компьютере он не работает, и я не могу найти причину.

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Согласно сообщению об ошибке, учетная запись «домен \ учетная запись $» не имеет доступа к базе данных myTable.

Я полагаю, что вы могли бы сначала использовать безопасность системы управления сервером SQL, чтобы проверить, что у учетной записи «домен \ учетная запись $» нет доступа к базе данных myTable (локального) сервера.

Подробнее, вы можете обратиться к этому ответу .


Обновление:

Насколько я знаю, если вы хотите получить доступ к SQL Server с помощью встроенной безопасности Windows. Сначала убедитесь, что ваш IIS-сервер и sql-сервер находятся в одной интрасети и используют один и тот же домен.

Тогда я предлагаю вам убедиться, что вы установили правильную учетную запись удостоверения пула приложений, которая имеет разрешение на доступ к базе данных sql.

1.Вы должны иметь учетную запись домена «домен \ учетная запись» на сервере sql, чтобы убедиться, что она имеет разрешение на чтение и запись

2.В IIS откройте настройки пула приложений. Для параметра «Идентификация» выберите «Пользовательский аккаунт». Введите имя пользователя домена \ аккаунт) и пароль.

Тогда это будет хорошо работать.

0 голосов
/ 23 апреля 2019

Пожалуйста, проверьте, есть ли у пользователя iispool права доступа к базе данных. Вы можете сделать это с помощью Microsoft Sql Server Management Studio. Я обычно забываю это! Надеюсь, это поможет вам! Привет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...