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:
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:
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?
quelle
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, habeCREATE USER [myuser] FOR LOGIN [myuser] WITH DEFAULT_SCHEMA=[mydb] GO
aber Fehler bekommenThe login already has an account under a different user name.
Beim Wechsel unserer API zur Verbindung mit einer Azure-Datenbank über einen neuen enthaltenen Benutzer mussten wir die Verbindungszeichenfolge folgendermaßen ändern:
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 .
quelle
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.
quelle
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-DbContext
Befehl darauf gestoßenhttps://github.com/aspnet/EntityFrameworkCore/issues/6624
quelle