web-dev-qa-db-fra.com

Comment créer un nouvel utilisateur dans une base de données SQL Azure?

J'essaie d'utiliser le modèle suivant:

-- =================================================
-- Create User as DBO template for SQL Azure Database
-- =================================================
-- For login <login_name, sysname, login_name>, create a user in the database
CREATE USER <user_name, sysname, user_name>
    FOR LOGIN <login_name, sysname, login_name>
    WITH DEFAULT_SCHEMA = <default_schema, sysname, dbo>
GO

-- Add user to the database owner role
EXEC sp_addrolemember N'db_owner', N'<user_name, sysname, user_name>'
GO

Je voudrais créer un utilisateur appelé user1 avec un mot de passe 'user1pass'. Je me suis connecté avec «l'authentification» de ma base de données par défaut et une fenêtre de requête est ouverte.

Mais le modèle n'a pas de sens pour moi. Par exemple, qu'est-ce que sysname, où dois-je fournir le mot de passe et que dois-je utiliser comme default_schema?

L'utilisateur particulier doit avoir le pouvoir de tout faire. Mais comment puis-je le configurer pour qu'il puisse tout faire, est-ce que je le fais si je fais de l'utilisateur le propriétaire de la base de données?

Jusqu'ici j'ai essayé:

CREATE USER user1, sysname, user1
    FOR LOGIN user1, sysname, user1
    WITH DEFAULT_SCHEMA = dbo, sysname, dbo
GO

Donnant:

Msg 102, niveau 15, état 1, ligne 1 Syntaxe incorrecte près de ','.

et:

CREATE USER user1
    FOR LOGIN user1
    WITH DEFAULT_SCHEMA = dbo
GO

Donnant:

Msg 15007, niveau 16, état 1, ligne 1 'utilisateur1' i

s pas une connexion valide ou vous n’avez pas la permission.

47
user1679941

Consultez ce lien pour toutes les informations: https://Azure.Microsoft.com/en-us/blog/adding-users-to-your-sql-Azure-database/

Vous devez d’abord créer une connexion pour SQL Azure, sa syntaxe est la suivante:

CREATE LOGIN username WITH password='password';

Cette commande doit être exécutée dans la base de données principale. Ensuite, vous pouvez exécuter des commandes pour créer un utilisateur dans la base de données. SQL Azure ou SQL Server fonctionne de la manière suivante: une connexion est d'abord créée au niveau du serveur, puis mappée à un utilisateur dans chaque base de données.

HTH

24
Igorek

Edit - Utilisateur contenu (v12 et versions ultérieures)

À partir de Sql Azure 12, les bases de données seront créées en tant que Bases de données contenues qui permettront aux utilisateurs d'être créés directement dans votre base de données, sans qu'il soit nécessaire de se connecter au serveur via maître.

CREATE USER [MyUser] WITH PASSWORD = 'Secret';
ALTER ROLE [db_datareader] ADD MEMBER [MyUser];

Remarque lors de la connexion à la base de données lors de l'utilisation d'un utilisateur contenu, vous devez toujours spécifier la base de données dans la chaîne de connexion.

 Connecting via a contained User

Connexion au serveur traditionnel - Utilisateur de base de données (Pre v 12)

Pour ajouter à la réponse de @ Igorek, vous pouvez effectuer les opérations suivantes dans SQL Server Management Studio:

Créer le nouveau login sur le serveur
Dans master (via la liste déroulante Available databases dans SSMS - car USE master ne fonctionne pas dans Azure):

enter image description here

créer le login:

CREATE LOGIN username WITH password='password';

Créer le nouvel utilisateur dans la base de données
Basculer vers la base de données actuelle (à nouveau via le menu déroulant des bases de données disponibles ou une nouvelle connexion)

CREATE USER username FROM LOGIN username;

(J'ai supposé que vous souhaitiez que l'utilisateur et les noms de connexion soient associés à username, mais changez si ce n'est pas le cas.)

Ajoutez maintenant l'utilisateur aux rôles de sécurité appropriés

EXEC sp_addrolemember N'db_owner', N'username'
GO

(Évidemment, un utilisateur d'application devrait avoir moins de privilèges que dbo.)

77
StuartLC

J'ai suivi les réponses ici, mais lorsque j'ai essayé de me connecter à mon nouvel utilisateur, un message d'erreur m'indiquant "The server principal 'newuser' is not able to access the database 'master' under the current security context".

Je devais également créer un nouvel utilisateur dans la table principale pour pouvoir vous connecter avec SSMS.

USE [master]
GO
CREATE LOGIN [newuser] WITH PASSWORD=N'blahpw'
GO
CREATE USER [newuser] FOR LOGIN [newuser] WITH DEFAULT_SCHEMA=[dbo]
GO

USE [MyDatabase]
CREATE USER newuser FOR LOGIN newuser WITH DEFAULT_SCHEMA = dbo
GO
EXEC sp_addrolemember N'db_owner', N'newuser'
GO
18
nthpixel

J'utilise l'outil de la console de gestion Azure de CodePlex, avec une interface graphique très utile, essayez-le. Vous pouvez enregistrer du code.

10
Jorge

Vous pouvez simplement créer un utilisateur contenu dans SQL DB V12. 

Create user containeduser with password = 'Password'

La connexion de l'utilisateur contenu est plus efficace que la connexion à la base de données à l'aide de la connexion créée par le maître. Vous pouvez trouver plus de détails @ http://www.sqlindepth.com/contained-users-in-sql-Azure-db-v12/

7
Sirisha Chamarthi

créez un utilisateur, puis ajoutez-le à un rôle spécifique:

CREATE USER [test] WITH PASSWORD=N'<strong password>'
go
ALTER ROLE [db_datareader] ADD MEMBER [test]
go
1
Antonio Santise

J'ai trouvé ce lien très utile:
https://Azure.Microsoft.com/en-gb/documentation/articles/sql-database-manage-logins/

Il détaille des choses comme:
- Compte d'abonné Azure SQL Database
- Utilisation d'utilisateurs Azure Active Directory pour accéder à la base de données
- Comptes principaux au niveau serveur (accès illimité)
- Ajout d'utilisateurs au rôle de base de données dbmanager

J'ai utilisé ceci et la réponse de Stuart pour faire ce qui suit:
Sur la base de données master (voir le lien pour savoir qui a les autorisations à ce sujet):

CREATE LOGIN [MyAdmin] with password='ReallySecurePassword'

Et puis sur la base de données en question:

CREATE USER [MyAdmin] FROM LOGIN [MyAdmin]
ALTER ROLE db_owner ADD MEMBER [MyAdmin]

Vous pouvez également créer des utilisateurs comme celui-ci, en fonction du lien:

CREATE USER [[email protected]] FROM EXTERNAL PROVIDER;
0
noelicus

Je pense que les modèles utilisent la notation suivante: nom de variable, type de variable, valeur par défaut. 

Sysname est un type de données intégré pouvant contenir les noms des objets système. 

Il est limité à 128 caractères Unicode.

-- same as sysname type
declare @my_sysname nvarchar(128);
0
CRAFTY DBA