База даних SQL Azure "Не вдалося ввійти для користувача" в додатку, але добре працює в SSMS


14

Я хотів випробувати функцію користувачів баз даних , що міститься в Azure SQL Database V12, але у мене виникає проблема з автентифікацією, яка мені здається дивною.

Я створив базу даних під назвою Classifier. Я додав свій IP до правил брандмауера, щоб я міг підключитися до сервера db Azure із SSMS на своїй робочій станції. Як тільки мені вдалося підключитися через SSMS для адміністрування, я спробував додати користувача до пароля до бази даних, наприклад:

CREATE USER classifier WITH PASSWORD='thepassword'

Я також додав цього користувача до ролі запису даних та читача:

exec sp_addrolemember 'db_datawriter', 'classifier'
exec sp_addrolemember 'db_datareader', 'classifier'

Після цього я можу підключитися до бази даних за допомогою цих облікових даних із SSMS:

введіть тут опис зображення

Але ось дещо йде не так: я спробував кілька різних завдань рядків підключення і, здається, не можу підключитися у веб-додатку, над яким я працюю. Він не працював у середовищі Azure, тому я працюю на localhost із рядком підключення до бази даних Azure, і він просто не підключиться. Ось рядок з'єднання, який я використовую на даний момент:

<add name="Classifier" connectionString="Data Source=xxxxxxx.database.secure.windows.net;Initial Catalog=Classifier;User ID=classifier;Password=xxxxxxxxxxxxx;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient"/>

Я спробував скинути пароль (через SSMS) для користувача, а потім оновити рядок з'єднання; Я також ще раз перевірив пароль, скопіювавши його прямо з цієї лінії підключення та в діалогове вікно підключення в SSMS, щоб переконатися, що там у мене не було певної помилки.

Я ввімкнув аудит на сервері db Azure, сподіваючись отримати детальну інформацію про те, чому він не працює, але все, що я отримую, це:

Помилка 18456, рівень 14, стан 1, Sever SQL Azure, рядок 1Вхід не вдався до "класифікатора" користувача

І ось тут я застряг. Більшість з того, що мені вдалося знайти за допомогою документації або блогів, вказує на те, що потрібно зробити, це подивитися на журнали SQL Server, щоб побачити, що таке справжній стан помилки, який би більш вузько вказував на характер відмови, але оскільки я Я маю справу з Azure, немає способу зробити це (наскільки я знаю).

Що може спричинити збій програми, коли SSMS (і, до речі, LinqPad та Visual Studio Server Explorer)?

Відповіді:


15

Ми з’ясували, що для вміщених баз даних / користувачів, які містяться, ви повинні вказати:

GRANT CONNECT TO [YOUR_USER]

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


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

У Azure я отримую помилку, Cannot find the user 'myuser', because it does not exist or you do not have permission.хоча ім'я користувача існує в розділі Безпека> Вхід, але не MyDatabse> Безпека> Користувачі. Я спробував, CREATE USER [myuser] FOR LOGIN [myuser] WITH DEFAULT_SCHEMA=[mydb] GOале The login already has an account under a different user name.
помилився

У мене була схожа проблема. У середовищі розробників все працює підключення до sql Azure, але колись опубліковано, воно видає цю помилку. Однак я не можу запустити команду або створити користувача, хто намагається щось інше?
Рікер Сільва

@dezso Я зіткнувся з подібною проблемою. Мій код ADO.NET та EF (DBContext) прекрасно працює на локальній машині (не пробував у Azure), але код EF, реалізований за допомогою IdentityDBConext, не вдається. Я не впевнений, що не так або які функції IdentityDBConext вимагає доступу до сервера. Ось моє оригінальне запитання stackoverflow.com/questions/40260720/…
Hiren Desai

5

Під час перемикання нашого API на підключення до бази даних Azure через нового вміщеного користувача, нам довелося змінити рядок з'єднання, щоб вона включала:

Persist Security Info=True;

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

Ми спочатку прийшли спробувати це з цього питання .


2

Моя проблема була іншою, але пов'язаною: я намагався підключитися до бази даних Azure SQL за допомогою SQL Server Management Studio (SSMS) із вміщеним користувачем . Я отримував повідомлення "Не вдалося ввійти для користувача" в SSMS.

Рішення: у параметрах підключення SSMS для вікна запиту я встановив "Підключитися до бази даних" ім'я бази даних, до якої я намагався підключитися.

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


Ви хочете пояснити протизаконний голос?
Вінс Хорст

1
Чи не я, але, мабуть, тому, що ваша відповідь є якось протилежною питання. Але все-таки корисно, і завдяки поганому дизайну цього діалогового вікна SSMS легко зробити помилку!
Simon_Weaver

0

Це може статися, якщо виконується команда Powershell, що містить рядок з'єднання, коли ваш пароль містить $. Ви можете обійти це, додавши рядок з'єднання одинарними лапками - або не зберігаючи свій пароль в рядку з'єднання в першу чергу ;-)

Напр. Я наткнувся на це з Scaffold-DbContextкомандою

https://github.com/aspnet/EntityFrameworkCore/isissue/6624

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