Невозможно открыть «тест» базы данных, запрошенный при входе в систему. Не удалось войти в систему. Ошибка входа для пользователя 'xyz \ ASPNET'


102

Я создал веб-сервис, который сохраняет некоторые данные в db. Но я получаю эту ошибку:

Невозможно открыть "тест" базы данных, запрошенный логином. Не удалось войти в систему. Не удалось войти в систему для пользователя "xyz \ ASPNET".

Моя строка подключения

Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True

Нам нужно гораздо больше информации, прежде чем мы сможем помочь диагностировать это.
sblom

У меня была эта проблема, и я закрыл визуальную студию и снова открыл ее, и она начала работать ..
Trees_are_great

Ответы:


47

Что ж, ошибка довольно понятная, не так ли? Вы пытаетесь подключиться к своему SQL Server с помощью пользователя «xyz / ASPNET» - это учетная запись, под которой работает ваше приложение ASP.NET.

Этой учетной записи не разрешено подключаться к SQL Server - либо создайте имя входа на SQL Server для этой учетной записи, либо затем укажите другую допустимую учетную запись SQL Server в строке подключения.

Можете ли вы показать нам свою строку подключения (обновив исходный вопрос)?

ОБНОВЛЕНИЕ: Хорошо, вы используете встроенную аутентификацию Windows -> вам нужно создать логин SQL Server для «xyz \ ASPNET» на вашем SQL Server - или изменить строку подключения на что-то вроде:

connectionString="Server=.\SQLExpress;Database=IFItest;User ID=xyz;pwd=top$secret"

Если в вашей базе данных есть пользователь «xyz» с паролем «top $ secret».


12
Not "не разрешено подключаться к SQL Server", но "не разрешено использовать базу данных" test "".
wRAR 05

@wRAR: правда - но я предполагаю, что вероятность того, что логин пользователя существует на сервере, но не включен в этой конкретной базе данных, вероятно, мала (по крайней мере, я так думаю)
marc_s

См. Также «Database = IFItest» vs «test», хотя это может быть опечатка.
wRAR 05

2
Один момент, который вы никогда не затрагивали, - это то, что имя БД тоже может быть неправильным. Я получал то же самое сообщение об исключении от моего Azure SQL Server, и оказалось, что я дал неправильное имя для своей БД в одной из строк подключения в коде C # в моем проекте ASP.NET.
Ron16

Рон, это была моя проблема. Я даже дважды проверил написание, но даже тогда пропустил.
Даррелл Ллойд Харви,

33
  • Либо: «xyz \ ASPNET» не является логином (в sys.server_principals)
  • Или: «xyz \ ASPNET» настроен, но не сопоставлен с пользователем в тесте базы данных (sys.database_principals)

Я бы выбрал второй вариант: сообщение об ошибке подразумевает, что база данных по умолчанию либо отсутствует, либо в ней нет прав, а не настроена как логин.

Чтобы проверить, настроен ли он как логин

SELECT SUSER_ID('xyz\ASPNET') -- (**not** SUSER_SID)

Если NULL

CREATE LOGIN [xyz\ASPNET] FROM WINDOWS

Если не NULL

USE test
GO
SELECT USER_ID('xyz\ASPNET')

Если NULL

USE test
GO
CREATE USER [xyz\ASPNET] FROM LOGIN [xyz\ASPNET]

1
Это просто здорово !, простой рабочий процесс для обнаружения и решения проблемы.
Mazen el Senih

С какой таблицей запускается «SELECT USER_ID (...»? Мастер?
Сэм

13

У меня была эта проблема, и я решил ее:

  • Перейдите в пулы приложений в IIS
  • Щелкните правой кнопкой мыши пул приложений моего проекта
  • В разделе Process Model откройте Identity
  • Выберите вариант индивидуальной учетной записи
  • Введите имя пользователя и пароль вашего ПК.

8

Лучшее решение проблемы входа в систему - создать пользователя для входа в sqlServer. Вот шаги для создания входа в SQL Server, использующего проверку подлинности Windows (SQL Server Management Studio):

  1. В SQL Server Management Studio откройте обозреватель объектов и разверните папку экземпляра сервера, в которой нужно создать новую учетную запись.
  2. Щелкните правой кнопкой мыши папку «Безопасность», выберите «Создать» и нажмите «Вход».
  3. На странице «Общие» введите имя пользователя Windows в поле «Имя для входа».
  4. Выберите Проверка подлинности Windows.
  5. Щелкните ОК.

Например, если имя пользователя - xyz\ASPNETвведите это имя в поле «Имя для входа».

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


8

В большинстве случаев это не проблема входа в систему, а проблема с созданием самой базы данных. Поэтому, если при создании вашей базы данных возникнет ошибка, она не будет создана в первую очередь. В этом случае, если вы попытаетесь войти в систему, независимо от пользователя, войти не удастся. Обычно это происходит из-за логической неверной интерпретации контекста базы данных.

Посетите сайт в браузере и ДЕЙСТВИТЕЛЬНО прочтите эти журналы ошибок, это может помочь вам определить проблему с вашим кодом (обычно это конфликтующие логические проблемы с моделью).

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


6

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

_dbContext.Database.EnsureCreated()

перед первым обращением к базе данных (перед заполнением БД).


4

Проблема

Ошибка представляет собой сообщение, подобное этому:

Невозможно открыть базу данных "ИМЯ БАЗЫ ДАННЫХ", запрошенную логином. Не удалось войти в систему. Ошибка входа для пользователя XYZ.

  • Ошибка обычно не может быть исправлена ​​простым перезапуском Visual Studio или полным перезапуском компьютера.
  • Ошибка также может быть обнаружена в виде заблокированного файла базы данных.

Исправление

Решение закладывается в следующие этапы. Вы не потеряете никаких данных в своей базе данных, и вам не следует удалять файл базы данных!

Предварительные требования: у вас должна быть установлена ​​среда SQL Server Management Studio (полная или экспресс-версия).

  1. Откройте SQL Server Management Studio
  2. В окне «Подключиться к серверу» (Файл-> Проводник подключения) введите следующее:
    • Тип сервера: ядро ​​СУБД
    • Имя сервера: (localdb) \ v11.0
    • Аутентификация: [Все, что вы использовали при создании локального db. Вероятно, проверка подлинности Windows).
  3. Нажмите "Подключиться"
  4. Разверните папку «Базы данных» в проводнике объектов (Вид-> Обозреватель объектов, F8).
  5. Найдите свою базу данных. Он должен называться полным путем к файлу вашей базы данных (.mdf).
    • Вы должны увидеть, что в конце имени базы данных написано «(Pending Recovery)», или когда вы попытаетесь расширить базу данных, она не сможет и может или не может выдать вам сообщение об ошибке.
    • Это проблема! Ваша база данных сильно разбилась ..
  6. Щелкните правой кнопкой мыши базу данных и выберите «Задачи -> Отключить ...».
  7. В окне отсоединения выберите свою базу данных в списке и проверьте столбец с надписью «Drop Connections».
  8. Щелкните ОК.
  9. Вы должны увидеть, что база данных исчезнет из списка баз данных. Теперь ваша проблема должна быть исправлена. Запустите приложение, использующее ваш localdb.
  10. После запуска вашего приложения ваша база данных снова появится в списке баз данных - это правильно. Он не должен больше говорить «Ожидает восстановления», поскольку он должен работать правильно.

Источник решения: https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed


Проблема в том, что я даже не могу найти эту БД.
Shimmy Weitzhandler

3

Я попытался обновить пользователя, и это сработало. См. Команду ниже.

USE ComparisonData// databaseName
EXEC  sp_change_users_login @Action='update_one', @UserNamePattern='ftool',@LoginName='ftool';

Просто замените user('ftool')соответственно.


3

Также бывает, когда вы вводите неправильное имя БД

ex : xxx-db-dev to xxx-dev-db

Иногда это просто глупая ошибка. У меня уходит больше часа, чтобы узнать это :( потому что я сначала пробую много чего сложного


2

Это работает для меня.

  1. Перейдите в SQL Server >> Security >> Logins, щелкните правой кнопкой мыши NT AUTHORITY \ NETWORK SERVICE и выберите Properties.
  2. Во вновь открывшемся экране свойств входа перейдите на вкладку «Сопоставление пользователей».
  3. Затем на вкладке «Сопоставление пользователей» выберите нужную базу данных - особенно базу данных, для которой отображается это сообщение об ошибке.
  4. Щелкните ОК.

Прочтите этот блог.

http://blog.sqlauthority.com/2009/08/20/sql-server-fix-error-cannot-open-database-requested-by-the-login-the-login-failed-login-failed-for- пользователь-NT-авторитет сети-сервис /


спасибо, использование "NT AUTHORITY \ SYSTEM" решило мою проблему.
Фарзад Карими

2

Я использовал проверку подлинности Windows для подключения к файлу .mdf локальной базы данных, и моим локальным сервером был sql server 2014. Моя проблема была решена с помощью этой строки подключения:

string sqlString = " Data Source = (LocalDB)\\MSSQLLocalDB;" + "AttachDbFilename = F:\\.........\\myDatabase.mdf; Integrated Security = True; Connect Timeout = 30";

Мне пришлось удалить эту часть «User Instance = True», чтобы моя локальная БД работала
Anonymous

2

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

  1. Убедитесь, что обозреватель объектов указывает на системную базу данных, такую ​​как master.
  2. Выполните a exec sp_who2и найдите все подключения к базе данных my_db. Завершите все соединения, выполнив KILL { session id }где идентификатор сеанса - это SPID, указанный процедурой sp_who2.
USE MASTER;
EXEC sp_who2
  1. Изменить базу данных
USE MASTER;
ALTER DATABASE [my_db] SET MULTI_USER
GO

1

Я не видел, чтобы об этом упоминалось в предыдущих выпусках, поэтому позвольте мне исключить другую возможность. Может быть, IFItestэто недостижимо или просто не существует. Например, если у вас есть несколько конфигураций, каждая со своей собственной базой данных, возможно, имя базы данных не было изменено на правильное для текущей конфигурации.


1

NB: при использовании службы Windows для размещения веб-службы.

Вы должны убедиться, что ваш веб-сервис использует правильную учетную запись для входа в систему для подключения к SQL Server.

  • Открытые службы (я предполагаю, что служба Windows установлена)
  • Щелкните правой кнопкой мыши службу и перейдите к свойствам.
  • Щелкните вкладку «Вход в систему».
  • Установите переключатель "Эта учетная запись".
  • Нажмите "Обзор"
  • Введите имя пользователя ПК в текстовое поле и нажмите кнопку «Проверить имя» справа.
  • Щелкните текст в текстовом поле, нажмите кнопку «ОК».
  • введите пароль для входа и примените

1

Вдохновленный ответом Cyptus, я использовал

_dbContext.Database.CreateIfNotExists();

на EF6 перед первым обращением к базе данных (перед заполнением БД).


1

Если вы не создали базу данных на своем сервере, вы получите ту же ошибку входа в систему. Убедитесь, что база данных существует, прежде чем входить в систему.


1

Я столкнулся с этой проблемой при попытке записи в базу данных по умолчанию, предоставленную в шаблоне asp.net mvc. Это было связано с тем, что база данных еще не была создана.

Чтобы создать базу данных и убедиться, что она доступна, выполните следующие действия:

  1. Откройте консоль диспетчера пакетов в Visual Studio.
  2. Запускаем команду "update-database"

Это создаст базу данных и запустит на ней все необходимые миграции.


0

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


0

Я обнаружил, что мне также пришлось установить опцию UserMapping при создании нового входа в систему, и это решило проблему для меня. Надеюсь, это поможет всем, кто тоже застрял здесь!

Изменить: установка входа в систему в качестве владельца базы данных также решила следующую проблему


0

Иногда эта проблема может возникнуть, если вы откроете эту базу данных на другом сервере sql (например, вы запустите студию управления sql (SMS) и добавите эту базу данных) и забудете остановить этот сервер. Как результат - приложение пытается подключиться к пользователю, уже подключенному к этой базе данных на другом сервере. Чтобы исправить это, попробуйте остановить этот сервер с помощью Config. диспетчер sql server.

Мои извинения за плохой английский. С уважением, Игнат.


0

В моем случае приложение asp.net обычно может без проблем подключаться к базе данных. Заметил такое сообщение в логах. Я включить журналы SQL сервера , и я выяснить это сообщение:

2016-10-28 10:27:10.86 Logon       Login failed for user '****'. Reason: Failed to open the explicitly specified database '****'. [CLIENT: <local machine>]
2016-10-28 10:27:13.22 Server      SQL Server is terminating because of a system shutdown. This is an informational message only. No user action is required.

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


0

Даже если вы установили логин в качестве владельца БД и установили отображение пользователей для базы данных, которая будет использовать логин, убедитесь, что фактический пользователь БД (а не только логин) имеет роль «владельца».


0

В моем случае я запускал службу Windows под идентификатором «Система». Ошибка была:

System.Data.SqlClient.SqlException (0x80131904): 
Cannot open database "MyDbName" requested by the login. The login failed.
Login failed for user 'MYDOMAINNAME\HOSTNAME$'.

Проблема в том, что ошибка вводит в заблуждение. Даже после того, как я добавил логин MYDOMAINNAME \ HOSTNAME $ в базу данных, предоставил этому логину доступ системному администратору и добавил пользователя для этого входа в мою целевую базу данных и сделал этого пользователя dbowner, я все еще получал ту же ошибку. Очевидно, мне нужно было сделать то же самое для входа в систему NT AUTHORITY \ SYSTEM. После этого я без проблем смог войти в систему. Я не знаю, почему сообщение об ошибке жалуется на «MYDOMAINNAME \ HOSTNAME $». Я удалил этот логин и соответствующего пользователя, и все по-прежнему работает.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.