Je voulais essayer la fonctionnalité des utilisateurs de base de données contenus sur Azure SQL Database V12, mais j'ai un problème d'authentification qui me semble étrange.
J'ai créé une base de données appelée Classifier
. J'ai ajouté mon adresse IP aux règles de pare-feu afin de pouvoir me connecter au serveur Azure db à partir de SSMS sur mon poste de travail. Une fois que j'ai pu me connecter via SSMS pour l'administration, j'ai essayé d'ajouter un utilisateur avec un mot de passe à la base de données, comme ceci:
CREATE USER classifier WITH PASSWORD='thepassword'
J'ai également ajouté cet utilisateur aux rôles de rédacteur et de lecteur de données:
exec sp_addrolemember 'db_datawriter', 'classifier'
exec sp_addrolemember 'db_datareader', 'classifier'
Après cela, je peux me connecter à la base de données avec ces informations d'identification de SSMS:
Mais c'est là que les choses tournent mal: j'ai essayé plusieurs incantations de chaînes de connexion différentes et je n'arrive pas à me connecter dans une application Web sur laquelle je travaille. Cela ne fonctionnait pas dans l'environnement Azure, je suis donc en cours d'exécution sur localhost avec une chaîne de connexion à la base de données Azure, et il ne se connecte tout simplement pas. Voici la chaîne de connexion que j'utilise en ce moment:
<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"/>
J'ai essayé de réinitialiser le mot de passe (via SSMS) pour l'utilisateur, puis de mettre à jour la chaîne de connexion; J'ai également revérifié le mot de passe en le copiant directement à partir de cette chaîne de connexion et dans la boîte de dialogue de connexion dans SSMS pour m'assurer que je n'avais pas de faute de frappe.
J'ai activé l'audit sur le serveur Azure db en espérant obtenir des détails sur les raisons de l'échec, mais tout ce que j'obtiens est le suivant:
Et c'est là que je suis coincé. La plupart de ce que j'ai pu trouver par le biais de documentation ou de blogs indique que la chose à faire est de regarder les journaux de SQL Server pour voir quel est le véritable état d'erreur, ce qui indiquerait plus précisément la nature de l'échec, mais puisque je 'ai affaire à Azure, il n'y a aucun moyen de le faire (pour autant que je sache).
Qu'est-ce qui pourrait entraîner l'échec de l'application là où SSMS (et LinqPad et Visual Studio Server Explorer, soit dit en passant) réussit?
la source
Cannot find the user 'myuser', because it does not exist or you do not have permission.
bien que le nom d'utilisateur existe sous Sécurité> Connexions mais pas MyDatabse> Sécurité> Utilisateurs. J'ai essayéCREATE USER [myuser] FOR LOGIN [myuser] WITH DEFAULT_SCHEMA=[mydb] GO
mais j'ai eu une erreurThe login already has an account under a different user name.
Lors du changement de notre API pour se connecter à une base de données Azure via un nouvel utilisateur contenu, nous avons dû changer notre chaîne de connexion pour inclure:
Bien que je ne comprenne pas pourquoi ce changement était nécessaire, je voulais publier ici au cas où cela aiderait quelqu'un d'autre à l'avenir.
Nous sommes venus à l'origine essayer de cette question .
la source
Mon problème était différent, mais lié: j'essayais de me connecter à une base de données Azure SQL en utilisant SQL Server Management Studio (SSMS) avec un utilisateur confiné . J'obtenais un message «Échec de la connexion pour l'utilisateur» dans SSMS.
Solution: dans les options de connexion SSMS pour la fenêtre de requête, j'avais défini "Se connecter à la base de données" sur le nom de la base de données à laquelle j'essayais de me connecter.
Explication: Rétrospectivement, la raison était évidente: les utilisateurs confinés ne sont autorisés qu'à se connecter aux bases de données dans lesquelles ils ont été créés.
la source
Cela peut se produire si vous exécutez une commande Powershell contenant une chaîne de connexion lorsque votre mot de passe contient
$
. Vous pouvez contourner cela en joignant la chaîne de connexion entre guillemets simples - ou en ne stockant pas votre mot de passe dans la chaîne de connexion en premier lieu ;-)Par exemple. J'ai rencontré ça avec la
Scaffold-DbContext
commandehttps://github.com/aspnet/EntityFrameworkCore/issues/6624
la source