Подтвердить что ты не робот

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

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

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

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

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

Ответ 1

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

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

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

UPDATE: Хорошо, вы используете встроенную проверку подлинности Windows → вам нужно создать логин SQL Server для "xyz\ASPNET" на вашем SQL Server - или изменить строку подключения на что-то вроде:

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

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

Ответ 2

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

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

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

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]

Ответ 3

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

  • В SQL Server Management Studio откройте Object Explorer и разверните папку    экземпляр сервера, в котором будет создан новый вход.
  • Щелкните правой кнопкой мыши папку "Безопасность", выберите "Создать" и нажмите "Войти".
  • На странице "Общие" введите имя пользователя Windows в поле "Имя пользователя".
  • Выберите Аутентификацию Windows.
  • Нажмите "ОК".

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

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

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

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

_dbContext.Database.EnsureCreated()

перед первым контактом с базой данных (до посева БД).

Ответ 7

Проблема

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

Невозможно открыть базу данных "DATABASE NAME", запрошенную логином. Вход не смогли. Ошибка входа в систему для пользователя XYZ.

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

Исправление

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

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

  • Откройте SQL Server Management Studio
  • В окне "Подключение к серверу" (File- > Connect object explorer) введите следующее:
    • Тип сервера: Database Engine
    • Имя сервера: (localdb)\v11.0
    • Аутентификация: [Независимо от того, что вы использовали при создании локального db. Возможно, Windows Authentication).
  • Нажмите "Подключить"
  • Разверните папку "Базы данных" в обозревателе объектов (View- > Object Explorer, F8)
  • Найдите свою базу данных. Его следует назвать полным путем к файлу базы данных (.mdf)
    • Вы должны увидеть, что он говорит "(Ожидание восстановления)" в конце имени базы данных или при попытке развернуть базу данных он не сможет и может или не может дать вам сообщение об ошибке.
    • Это проблема! Ваша база данных существенно разбилась.
  • Щелкните правой кнопкой мыши по базе данных и выберите "Задачи → Отсоединить...".
  • В окне отсоединения выберите свою базу данных в списке и отметьте столбец "Drop Connections"
  • Нажмите "ОК".
  • Вы должны увидеть, как база данных исчезнет из списка баз данных. Теперь ваша проблема должна быть исправлена. Запустите и запустите приложение, которое использует ваш localdb.
  • После запуска приложения ваша база данных снова появится в списке баз данных - это правильно. Он не должен говорить "Ожидание восстановления" больше, так как он должен работать должным образом.

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

Ответ 8

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

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

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

Ответ 9

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

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

Ответ 10

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

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

Ответ 11

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

Ответ 12

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

Ответ 13

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

  • Перейдите в раздел SQL Server → Безопасность → Логины и щелкните правой кнопкой мыши службу NT AUTHORITY\NETWORK SERVICE и выберите "Свойства"
  • Во вновь открывшемся экране Свойства входа перейдите на вкладку "Сопоставление пользователей".
  • Затем на вкладке "Сопоставление пользователей" выберите нужную базу данных - особенно базу данных, для которой отображается это сообщение об ошибке.
  • Нажмите "ОК".

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

http://blog.sqlauthority.com/2009/08/20/sql-server-fix-error-cannot-open-database-requested-by-the-login-the-login-failed-login-failed-for-user-nt-authoritynetwork-service/

Ответ 14

Это также происходит, когда вы вводите неправильное имя DB

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

Когда-то это просто глупая ошибка. Я занимаю более 1 часа, чтобы узнать это:( потому что я просто стараюсь много сложного в первую очередь

Ответ 15

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

_dbContext.Database.CreateIfNotExists();

на EF6 до первого контакта с базой данных (до заполнения базы данных).

Ответ 16

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

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

Ответ 17

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

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

Ответ 18

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

Ответ 19

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

Ответ 20

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

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

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

Ответ 21

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

Ответ 22

В моем случае я запускал Службу 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 $' в базу данных, предоставил этому логину доступ sysadmin, добавил пользователя для этого логина в моей целевой базе данных и сделал этого пользователя dbowner, я все еще получал ту же ошибку. Очевидно, мне нужно было сделать то же самое для входа в систему NT AUTHORITY\SYSTEM. После того, как я это сделал, я смог войти без проблем. Я не знаю, почему сообщение об ошибке жалуется на 'MYDOMAINNAME\HOSTNAME $'. Я удалил этот логин и соответствующего пользователя, и все еще работает.