Неможливо відкрити "тест" бази даних, який вимагає вхід. Помилка входу. Помилка входу для користувача "xyz \ ASPNET"


97

Я створив веб-службу, яка зберігає деякі дані в db. Але я отримую цю помилку:

Неможливо відкрити "тест" бази даних, який вимагає вхід. Помилка входу. Помилка входу для користувача "xyz \ ASPNET".

Мій рядок з'єднання є

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

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

У мене був цей випуск, і закрили візуальну студію, відкрили її знову, і вона почала працювати ..
дерева_а_греат

Відповіді:


47

Ну, помилка досить ясна, ні? Ви намагаєтеся підключитися до свого SQL Server із користувачем "xyz / ASPNET" - це той рахунок, під яким працює додаток ASP.NET.

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

Чи можете ви показати нам свій рядок зв’язку (оновивши своє початкове запитання)?

ОНОВЛЕННЯ: Добре, ви використовуєте інтегровану автентифікацію Windows -> вам потрібно створити логін для SQL Server для "xyz \ ASPNET" на своєму SQL сервері - або змінити рядок підключення на щось на кшталт:

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

Якщо у вас є користувач "xyz" з паролем "top $ secret" у вашій базі даних.


11
Не "заборонено підключатися до SQL Server", але "не дозволяється використовувати" тест "бази даних.
wRAR

@wRAR: правда - але я думаю, що шанс входу користувача існує на сервері, але він не включений у цій конкретній базі даних, ймовірно, тонкий (принаймні, я б вважав)
marc_s

Дивіться також "База даних = IFItest" проти "тест", хоча це може бути помилкою.
wRAR

2
Один момент, якого ви ніколи не торкалися, - це те, що Ім'я БД теж може помилятися. Мене викинуло повідомлення про виняток із мого Azure SQL Server, і виявилося, що я вказав неправильну назву для моєї БД в одній із рядків підключення в коді C # в моєму проекті ASP.NET.
Ron16

Рон, це було моєю проблемою. Я навіть двічі перевіряв правопис, але пропустив його навіть тоді.
Даррелл Ллойд Гарві

32
  • Або: "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

12

У мене була ця проблема, і для мене це було вирішено:

  • Перейдіть до пулів програм у IIS
  • Клацніть правою кнопкою миші на моєму пулі заявок на проект
  • У розділі Модель процесу відкрийте ідентичність
  • Виберіть параметр "Спеціальний обліковий запис"
  • Введіть ім’я та пароль вашого ПК.

Працював і для мене!
Mazen el Senih

8

Найкраще рішення проблеми входу - створити користувача для входу в sqlServer. Ось такі кроки для створення входу в SQL Server, який використовує автентифікацію Windows (SQL Server Management Studio):

  1. У студії управління SQL Server, відкрийте Провідник об’єктів і розгорніть папку екземпляра сервера, в якій можна створити новий логін.
  2. Клацніть правою кнопкою миші папку Безпека, вкажіть пункт Нове, а потім натисніть Увійти.
  3. На сторінці Загальні введіть ім’я користувача Windows у полі Ім'я для входу.
  4. Виберіть Windows Authentication.
  5. Натисніть кнопку ОК.

Наприклад, якщо ім’я користувача є xyz\ASPNET, тоді введіть це ім'я у поле Ім'я користувача.

Також вам потрібно змінити відображення користувача, щоб дозволити доступ до бази даних, до якої ви хочете отримати доступ.


8

У більшості випадків це не проблема входу, а проблема створення самої бази даних. Отже, якщо є помилка створення вашої бази даних, вона б створювалася не в першу чергу. У такому випадку, якщо ви спробували увійти, незалежно від користувача, вхід не вдасться. Зазвичай це відбувається через логічне неправильне тлумачення контексту db.

Заходьте на сайт у веб-переглядачі і дійсно читайте ці журнали помилок, це може допомогти вам виявити проблему з вашим кодом (зазвичай конфліктні логічні проблеми з моделлю).

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


6

Для мене база даних не була створена, і спочатку код EF повинен був її створити, але завжди помиляється в цій помилці. Цей же рядок підключення працював у веб-проекті за замовчуванням ядра aspnet. Рішення було додати

_dbContext.Database.EnsureCreated()

перед першим контактом із базою даних (перед висіванням БД).


4

Питання

Помилка представляє себе як повідомлення, подібне до цього:

Неможливо відкрити базу даних "ІМЯ ДАТАБАЗИ", яку вимагає вхід. Помилка входу. Не вдалося ввійти для користувача XYZ.

  • Помилку зазвичай не можна виправити простою Visual Studio або перезавантаженням на комп'ютері.
  • Помилку можна також знайти як наче заблокований файл бази даних.

Виправлення

Розчин закладається наступними етапами. Ви не втратите жодних даних у вашій базі даних і не повинні видаляти файл своєї бази даних!

Попередня умова: у вас повинна бути встановлена ​​студія управління SQL Server (повна або експресна)

  1. Відкрийте студію управління SQL Server
  2. У вікні "Підключення до сервера" (Файл-> Підключити провідник об'єктів) введіть наступне:
    • Тип сервера: База даних двигуна
    • Ім'я сервера: (localdb) \ v11.0
    • Перевірка автентичності: [Що б ви не використовували, коли створювали локальний db. Можливо, автентифікація Windows).
  3. Натисніть "Підключити"
  4. Розгорніть папку "Бази даних" в Провіднику об'єктів (Перегляд-> Провідник об'єктів, F8)
  5. Знайдіть свою базу даних. Він повинен бути названий як повний шлях до файлу вашої бази даних (.mdf)
    • Ви повинні побачити, що в кінці імені бази даних написано "(очікує відновлення)" або при спробі розширити базу даних вона не зможе, а може і не може повідомити вам про помилку.
    • Це питання! Ваша база даних суттєво розбита ..
  6. Клацніть правою кнопкою миші на базі даних та виберіть "Завдання -> Від'єднати ...".
  7. У вікні від'єднання виберіть базу даних у списку та перевірте стовпець із написом "Скасувати з'єднання"
  8. Натисніть кнопку ОК.
  9. Вам слід побачити, як база даних зникає зі списку баз даних. Тепер вашу проблему слід вирішити. Запустіть і запустіть свою програму, яка використовує ваш localdb.
  10. Після запуску програми ваша база даних знову з’явиться у списку баз даних - це правильно. Він більше не повинен говорити "Очікує на відновлення", оскільки він повинен працювати належним чином.

Джерело рішення: https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed


Проблема в тому, що я навіть не можу знайти цю БД.
Шиммі Вайцхандлер

3

Це також трапляється, коли ви вводите неправильну назву БД

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

Колись це просто дурна помилка. На це мені потрібно більше 1 години, щоб дізнатися це :( тому що я просто спершу спробую багато складного


2

Я спробував оновити користувача, і це спрацювало. Дивіться команду нижче.

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

Просто замініть user('ftool')відповідно.


2

Це працює для мене.

  1. Перейдіть до SQL Server >> Безпека >> Логін та клацніть правою кнопкою миші на 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- user-nt-Authoritynetwork-service /


дякую, використовуючи "NT AUTHORITY \ SYSTEM" вирішив мою проблему.
Фарзад Карімі

2

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

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

Мені довелося видалити цю частину "Користувальний екземпляр = Істинно", щоб мій локальний БД працював
Анонім

2

У моєму випадку це інше питання. База даних перетворилася на єдиний користувальницький режим, і друге з'єднання з базою даних показало це виключення. Щоб вирішити цю проблему, виконайте наведені нижче дії.

  1. Переконайтесь, що провідник об’єктів вказаний на системну базу даних, наприклад, на головну.
  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

Примітка: Якщо для розміщення веб-сервісу використовується служба Windows.

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

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

1

Натхненний циптовою відповіддю, яку я використав

_dbContext.Database.CreateIfNotExists();

на EF6 перед першим контактом із базою даних (перед висіванням DB).


1

Якщо ви не створили базу даних на своєму сервері, ви отримаєте ту саму помилку для входу. Переконайтеся, що база даних існує перед тим, як увійти.


1

Я зіткнувся з цією проблемою при спробі запису до бази даних за замовчуванням, що міститься в шаблоні asp.net mvc. Це було пов’язано з тим, що база даних ще не була створена.

Щоб створити базу даних і переконатися в її доступності, виконайте наступні дії:

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

Це створить базу даних запуску всіх необхідних міграцій на ній.


0

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


0

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

Редагувати: Встановлення входу як власника db вирішило і наступну проблему


0

Іноді ця проблема може виникнути, якщо ви відкриєте цей db на іншому сервері sql (наприклад, ви запускаєте студію керування sql (SMS) і додаєте цей db) і забудете зупинити цей сервер. Як результат - ви намагаєтеся зв’язатися з користувачем, який уже підключений у цьому db на іншому сервері. Щоб виправити це, спробуйте зупинити цей сервер за допомогою Config. сервер диспетчера sql.

Мої вибачення за погану англійську мову. З повагою, Ігнат.


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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.