it-swarm.com.de

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

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

Ich habe eine Datenbank namens Classifier erstellt. Ich habe meine IP zu den Firewall-Regeln hinzugefügt, damit ich über SSMS auf meiner Workstation eine Verbindung zum Azure-Datenbankserver herstellen kann. Nachdem ich mich für die Verwaltung über SSMS verbinden 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 Rollen für Datenschreiber und -leser hinzugefügt:

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

Danach kann ich mit diesen Anmeldeinformationen von SSMS aus eine Verbindung zur Datenbank herstellen:

enter image description here

Aber hier geht es schief: Ich habe verschiedene Beschwörungsformeln für Verbindungszeichenfolgen ausprobiert und kann in einer Web-App, an der ich arbeite, scheinbar keine Verbindung herstellen. In der Azure-Umgebung hat es nicht funktioniert, daher verwende ich localhost mit einer Verbindungszeichenfolge zur Azure-Datenbank und es wird einfach keine Verbindung hergestellt. Hier ist die Verbindungszeichenfolge, die ich gerade 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 Passwort auch noch einmal ü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 dies fehlschlägt. Ich erhalte jedoch nur Folgendes:

Err 18456, Level 14, State 1, Sever SQL Azure, Line 1Login failed for user 'classifier'

Und hier stecke ich fest. Das meiste, was ich anhand von Dokumentation oder Blogs finden konnte, deutet darauf hin, dass ich in SQL Server-Protokollen nachsehen muss, wie der tatsächliche Fehlerstatus lautet, der die Art des Fehlers genauer anzeigen würde, aber seit ich Wenn es um Azure geht, gibt es keine Möglichkeit, dies zu tun (soweit ich weiß).

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

14
Ben Collins

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

GRANT CONNECT TO [YOUR_USER]

Andernfalls scheint CONNECT standardmäßig widerrufen zu werden. Sobald wir die obige Änderung vorgenommen haben, konnten wir auf die Datenbank zugreifen.

16

Beim Umschalten unserer API auf eine Verbindung zu einer Azure-Datenbank über einen neuen enthaltenen Benutzer mussten wir unsere Verbindungszeichenfolge so ändern, dass sie Folgendes enthält:

Persist Security Info=True;

Obwohl ich nicht verstehe, warum diese Änderung erforderlich war, wollte ich hier posten, falls sie in Zukunft jemand anderem hilft.

Wir sind ursprünglich gekommen, um dies von diese Frage zu versuchen.

5
sfm

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. Ich habe in SSMS die Meldung "Anmeldung für Benutzer fehlgeschlagen" erhalten.

Lösung: In den SSMS-Verbindungsoptionen für das Abfragefenster hatte ich "Mit Datenbank verbinden" auf den Namen der Datenbank gesetzt, zu der ich versucht habe verbinden.

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

2
Vince Horst

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 überhaupt nicht in der Verbindungszeichenfolge speichern ;-)

Z.B. Ich bin mit dem Befehl Scaffold-DbContext Darauf gestoßen

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

0
Simon_Weaver