База данных Azure SQL «Ошибка входа пользователя» в приложении, но она отлично работает в SSMS

14

Я хотел опробовать функцию пользователей автономной базы данных в базе данных SQL Azure V12, но у меня возникла проблема с аутентификацией, которая кажется мне странной.

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

CREATE USER classifier WITH PASSWORD='thepassword'

Я также добавил этого пользователя в роли автора данных и читателя:

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

После этого я могу подключиться к базе данных с этими учетными данными из SSMS:

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

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

Я включил аудит на сервере базы данных Azure в надежде получить некоторые сведения о том, почему он не работает, но все, что я получаю, это:

Ошибка 18456, Уровень 14, Состояние 1, Завершить SQL Azure, Ошибка строки 1 для пользователя «классификатор»

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

Что может привести к сбою приложения в случае успеха SSMS (а также LinqPad и Visual Studio Server Explorer)?

Бен Коллинз
источник

Ответы:

15

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

GRANT CONNECT TO [YOUR_USER]

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

HowardvanRooijen
источник
У нас была существующая учетная запись, которая работала, а затем перестала работать. Я должен был снова подключиться к нему.
Шейн Кортрилл,
В 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.
Korayem
У меня была аналогичная проблема. В среде разработки все работает при подключении к sql Azure, но после публикации выдает эту ошибку. Однако я не могу запустить команду или создать пользователя, кто-нибудь пытается что-то другое?
Рикер Сильва
@dezso У меня похожая проблема. Мой код ADO.NET и EF (DBContext) отлично работает на локальном компьютере (не пробовал в Azure), но код EF, реализованный с использованием IdentityDBConext, завершается неудачно. Я не уверен, что не так или какие функции IdentityDBConext требует доступа к серверу. Вот мой оригинальный вопрос stackoverflow.com/questions/40260720/…
Hiren Desai
5

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

Persist Security Info=True;

Хотя я не понимаю, почему это изменение было необходимо, я хотел бы опубликовать здесь на случай, если это поможет кому-то еще в будущем.

Мы изначально пришли, чтобы попробовать это из этого вопроса .

SFM
источник
2

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

Решение: в параметрах подключения SSMS для окна запроса я установил «Соединение с базой данных» с именем базы данных, к которой я пытался подключиться.

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

Винс Хорст
источник
Хотите объяснить голосование против?
Винс Хорст
1
Был не я, но, вероятно, потому что ваш ответ является своего рода противоположностью вопроса. Тем не менее, все еще полезно, и благодаря плохому дизайну этого диалога SSMS легко допустить ошибку!
Simon_Weaver
0

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

Например. Я столкнулся с этим с Scaffold-DbContextкомандой

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

Simon_Weaver
источник