69 votes

Un nouvel utilisateur ne peut pas se connecter à SQL Azure

Je crée un nouvel utilisateur en lecture/écriture sur SQL Azure comme suit :

-- Connected to master
create login [fred] with password = 'xxx';

-- Connected to my DB
create user [fred] from login fred;
EXEC sp_addrolemember 'db_datareader', 'fred';
EXEC sp_addrolemember 'db_datawriter', 'fred';

Lorsque je me connecte en utilisant SSMS, j'obtiens une erreur disant Cannot open database "master" requested by the login. The login failed.

Qu'est-ce que je fais mal ou que je rate ?

129voto

Herve Roggero Points 2727

Par défaut, SSMS essaie de se connecter à master, mais votre nouveau compte n'a pas accès à master ; seulement à la base de données des utilisateurs, je présume.

Sur l'écran de connexion de SSMS, vous devez également spécifier le nom de la base de données ; il suffit de cliquer sur l'icône de la base de données. Options >> qui ouvre l'onglet Propriétés de la connexion. Dans cet onglet, indiquez le nom de la base de données à laquelle vous essayez de vous connecter.

4 votes

J'ai essayé de faire ça, mais j'ai toujours la même erreur. J'ai dû créer l'utilisateur à partir du login sur master également. Comme la réponse de Reddy ci-dessous

0 votes

Merci beaucoup Hervé ! ! J'ai résolu mon problème :)

1 votes

Une faute de frappe dans le nom de la base de données saisie entraîne également le même message d'erreur

45voto

Après avoir créé l'utilisateur de la base de données dans la base de données spécifique Database1, sélectionnez à nouveau 'master' et créez l'utilisateur de la base de données. Exécutez l'instruction ci-dessous deux fois - une pour Database1 et une autre pour 'master'.

CREATE USER appuser1 FROM LOGIN appuser1;

Malheureusement, cela n'est pas documenté dans l'aide d'Azure. https://docs.microsoft.com/en-gb/azure/azure-sql/database/logins-create-manage

4 votes

Cela viole la Conception de l'utilisateur confiné qui isole un utilisateur de la seule base de données dont il a besoin.

19voto

foluis Points 356

--> Ouvrez une nouvelle fenêtre de requête pour la base de données principale et exécutez les commandes suivantes

CREATE LOGIN AppLogin WITH password='XXXXXX'
GO

CREATE USER [AppUser] FOR LOGIN [AppLogin] WITH DEFAULT_SCHEMA=[dbo]
GO

--> Ouvrir une nouvelle fenêtre de requête pour VOTRE base de données

CREATE USER [AppUser] FOR LOGIN [AppLogin] WITH DEFAULT_SCHEMA=[dbo]
GO

EXEC sp_addrolemember 'db_owner', 'AppUser';
GO

Source : Comment créer une connexion utilisateur personnalisée pour Azure SQL Database

4voto

D33 Points 176

Comme Karol a commenté la réponse d'Hervé Roggero, j'ai eu le même problème même après avoir sélectionné la base de données.

Dans notre cas, le problème était que les utilisateurs que nous avions créés dans nos bases de données étaient désactivés. the blackened users are the users we added... and were like that

Après avoir exécuté le script suivant dans la base de données que nous voulions connecter pour chaque utilisateur :

  GRANT CONNECT TO [ourDbUser]

Nous avons rafraîchi les utilisateurs de la base de données et maintenant ils sont activés, et ensuite nous avons pu nous connecter à la base de données avec succès.

3voto

CitrusO2 Points 392

Pour moi, le problème était que la personne qui a créé l'utilisateur sur la base de données l'a fait sans spécifier FROM LOGIN L'utilisateur était donc disponible dans l'onglet Sécurité->Utilisateurs, mais la connexion n'était toujours pas possible. J'ai dû recréer l'utilisateur et le lier au login avec le même nom dans la base de données :

DROP USER [myuser]
GO

CREATE USER [myuser] FROM LOGIN [myuser] WITH DEFAULT_SCHEMA=[dbo]
GO

et ensuite accorder les permissions correctes sur la base de données, dans mon cas :

ALTER ROLE db_datareader ADD MEMBER [myuser]
ALTER ROLE db_datawriter ADD MEMBER [myuser]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X