Azure SQL-Datenbank „Anmeldung für Benutzer fehlgeschlagen“ in der Anwendung, funktioniert in SSMS jedoch einwandfrei


14

Ich wollte die Funktion für enthaltene Datenbankbenutzer in Azure SQL Database V12 ausprobieren , habe jedoch ein Problem bei der Authentifizierung, das mir seltsam vorkommt.

Ich habe eine Datenbank namens erstellt Classifier. Ich habe meine IP-Adresse zu den Firewallregeln hinzugefügt, damit ich von SSMS auf meiner Arbeitsstation aus eine Verbindung zum Azure-Datenbankserver herstellen kann. Nachdem ich für die Verwaltung eine Verbindung über SSMS herstellen konnte, habe ich versucht, der Datenbank einen Benutzer mit einem Kennwort hinzuzufügen:

CREATE USER classifier WITH PASSWORD='thepassword'

Ich habe diesen Benutzer auch zu den Data Writer- und Reader-Rollen hinzugefügt:

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

Danach kann ich mit den folgenden Anmeldeinformationen von SSMS eine Verbindung zur Datenbank herstellen:

Bildbeschreibung hier eingeben

Aber hier geht es schief: Ich habe verschiedene Beschwörungsformeln für Verbindungszeichenfolgen ausprobiert und kann in einer Web-App, an der ich arbeite, keine Verbindung herstellen. In der Azure-Umgebung hat es nicht funktioniert, daher wird auf localhost eine Verbindungszeichenfolge zur Azure-Datenbank ausgeführt, und es wird einfach keine Verbindung hergestellt. Hier ist die Verbindungszeichenfolge, die ich im Moment verwende:

<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"/>

Ich habe versucht, das Kennwort (über SSMS) für den Benutzer zurückzusetzen und dann die Verbindungszeichenfolge zu aktualisieren. Ich habe das Kennwort auch doppelt überprüft, indem ich es direkt aus dieser Verbindungszeichenfolge in den Verbindungsdialog in SSMS kopiert habe, um sicherzustellen, dass ich dort keinen Tippfehler hatte.

Ich habe die Überwachung auf dem Azure-Datenbankserver aktiviert, in der Hoffnung, einige Details darüber zu erhalten, warum sie fehlschlägt, aber alles, was ich erhalte, ist Folgendes:

Err 18456, Level 14, Status 1, Sever SQL Azure, Line 1Login für Benutzer 'classifier' fehlgeschlagen

Und hier stecke ich fest. Das meiste, was ich anhand von Dokumentation oder Blogs finden konnte, deutet darauf hin, dass das, was zu tun ist, darin besteht, in SQL Server-Protokollen zu suchen, um den tatsächlichen Fehlerstatus zu ermitteln, der die Art des Fehlers genauer anzeigen würde, aber seitdem ich Ich habe es mit Azure zu tun, es gibt keine Möglichkeit, dies zu tun (soweit ich weiß).

Was kann dazu führen, dass die Anwendung fehlschlägt, wenn SSMS (und im Übrigen LinqPad und Visual Studio Server Explorer) erfolgreich sind?

Antworten:


15

Wir haben festgestellt, dass Sie bei enthaltenen Datenbanken / enthaltenen Benutzern Folgendes angeben müssen:

GRANT CONNECT TO [YOUR_USER]

Ansonsten CONNECTscheint standardmäßig widerrufen zu werden. Sobald wir die oben genannten Änderungen vorgenommen haben, können wir auf die Datenbank zugreifen.


Wir hatten ein bestehendes Konto, das funktionierte und dann aufhörte zu arbeiten. Ich musste ihm erneut eine Verbindung gewähren.
Shane Courtrille

Unter Azure wird eine Fehlermeldung Cannot find the user 'myuser', because it does not exist or you do not have permission.angezeigt , obwohl der Benutzername unter "Sicherheit"> "Anmeldungen", nicht jedoch unter "MyDatabse"> "Sicherheit"> "Benutzer" vorhanden ist. Ich habe versucht, habe CREATE USER [myuser] FOR LOGIN [myuser] WITH DEFAULT_SCHEMA=[mydb] GOaber Fehler bekommenThe login already has an account under a different user name.
Korayem

Ich hatte ein ähnliches Problem. In der Entwicklungsumgebung funktioniert alles, was mit SQL Azure verbunden ist, aber sobald es veröffentlicht ist, wird dieser Fehler ausgegeben. Allerdings kann ich den Befehl nicht ausführen oder den Benutzer erstellen, versucht jemand etwas anderes?
Ricker Silva

@dezso Ich stehe vor einem ähnlichen Problem. Mein ADO.NET- und EF-Code (DBContext) funktioniert auf dem lokalen Computer einwandfrei (in Azure nicht ausprobiert). Mit IdentityDBConext implementierter EF-Code schlägt jedoch fehl. Ich bin nicht sicher, was falsch ist oder welche Funktionen von IdentityDBConext Zugriff auf den Server erfordern. Hier ist meine ursprüngliche Frage stackoverflow.com/questions/40260720/…
Hiren Desai

5

Beim Wechsel unserer API zur Verbindung mit einer Azure-Datenbank über einen neuen enthaltenen Benutzer mussten wir die Verbindungszeichenfolge folgendermaßen ändern:

Persist Security Info=True;

Obwohl ich nicht verstehe, warum diese Änderung erforderlich war, wollte ich sie hier veröffentlichen, um anderen in Zukunft zu helfen.

Wir sind ursprünglich gekommen, um dies anhand dieser Frage zu versuchen .


2

Mein Problem war anders, aber verwandt: Ich habe versucht, mithilfe von SQL Server Management Studio (SSMS) mit einem enthaltenen Benutzer eine Verbindung zu einer Azure SQL-Datenbank herzustellen . In SSMS wurde die Meldung "Anmeldung für Benutzer fehlgeschlagen" angezeigt.

Lösung: In den SSMS-Verbindungsoptionen für das Abfragefenster hatte ich "Mit Datenbank verbinden" auf den Namen der Datenbank festgelegt, zu der ich eine Verbindung herstellen wollte.

Erläuterung: Im Nachhinein war der Grund offensichtlich: Enthaltene Benutzer dürfen nur eine Verbindung zu der Datenbank (den Datenbanken) herstellen, in der sie erstellt wurden.


Möchtest du die Gegenstimme erklären?
Vince Horst

1
War ich aber wohl nicht, weil deine Antwort sozusagen das Gegenteil von der Frage ist. Trotzdem nützlich und dank des schlechten Designs dieses SSMS-Dialogs leicht zu begehen!
Simon_Weaver

0

Dies kann auftreten, wenn Sie einen Powershell-Befehl ausführen, der eine Verbindungszeichenfolge enthält, wenn Ihr Kennwort enthält $. Sie können dies umgehen, indem Sie die Verbindungszeichenfolge in einfache Anführungszeichen setzen - oder indem Sie Ihr Kennwort gar nicht erst in der Verbindungszeichenfolge speichern ;-)

Z.B. Ich bin mit Scaffold-DbContextBefehl darauf gestoßen

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.