CREATE USER (Transact-SQL)

Ajoute un utilisateur à la base de données active. On dénombre onze types d'utilisateurs :

Utilisateurs basés sur les comptes de connexion dans master Il s'agit du type d'utilisateur le plus commun.

  • Utilisateur basé sur un compte de connexion selon un utilisateur Windows.

  • Utilisateur basé sur un compte de connexion basé sur un groupe Windows.

  • Utilisateur basé sur un compte de connexion utilisant l'authentification SQL Server.

Utilisateurs qui s'authentifient à la base de données Autorisé uniquement dans une base de données à relation contenant-contenu.

  • Utilisateur basé sur un utilisateur Windows qui ne dispose d'aucun compte de connexion.

  • Utilisateur basé sur un groupe Windows qui ne dispose d'aucun compte de connexion.

  • Utilisateur de base de données à relation contenant-contenu avec mot de passe.

Utilisateurs basés sur des principaux Windows qui se connectent via des comptes de connexion de groupe Windows

  • Utilisateur basé sur un utilisateur Windows qui ne dispose d'aucun compte de connexion, mais peut se connecter au Moteur de base de données via une appartenance à un groupe Windows.

  • Utilisateur basé sur un groupe Windows qui ne dispose pas de compte de connexion, mais peut se connecter au moteur de base de données via une appartenance à un groupe Windows différent.

Utilisateurs qui ne peuvent pas s'authentifier Ces utilisateurs ne peuvent pas se connecter à SQL Server.

  • Utilisateur sans compte de connexion. Impossible de se connecter, mais peut se voir accorder des autorisations.

  • Utilisateur basé sur un certificat. Impossible de se connecter, mais peut se voir accorder des autorisations et peut signer des modules.

  • Utilisateur basé sur une clé asymétrique. Impossible de se connecter, mais peut se voir accorder des autorisations et peut signer des modules.

Icône Lien de rubrique Conventions de la syntaxe Transact-SQL

Syntaxe

Users based on logins in master
CREATE USER user_name 
    [ 
        { FOR | FROM } LOGIN login_name 
    ]
    [ WITH DEFAULT_SCHEMA = schema_name ] 
[ ; ]

Users that authenticate at the database
CREATE USER 
    {
      windows_principal [ WITH <options_list> [ ,... ] ]
    | user_name WITH PASSWORD = 'password' [ , <options_list> [ ,... ] 
    }
 [ ; ]

Users based on Windows principals that connect through Windows group logins
CREATE USER 
    { 
          windows_principal [ { FOR | FROM } LOGIN windows_principal ]
        | user_name { FOR | FROM } LOGIN windows_principal
    }
    [ WITH DEFAULT_SCHEMA = schema_name ] 
[ ; ]

Users that cannot authenticate 
CREATE USER user_name 
    {
         WITHOUT LOGIN [ WITH DEFAULT_SCHEMA = schema_name ]
       | { FOR | FROM } CERTIFICATE cert_name 
       | { FOR | FROM } ASYMMETRIC KEY asym_key_name 
    }
 [ ; ]

<options_list> ::=
      DEFAULT_SCHEMA = schema_name
    | DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }
    | SID = sid

Arguments

  • user_name
    Spécifie le nom qui identifie l'utilisateur dans cette base de données. user_name est de type sysname. Il peut comporter jusqu'à 128 caractères. Lors de la création d'un utilisateur basé sur un principal Windows, le nom du principal Windows devient le nom d'utilisateur sauf si un autre nom d'utilisateur est spécifié.

  • LOGIN login_name
    Spécifie le compte de connexion pour lequel l'utilisateur de base de données est créé. login_name doit être un compte de connexion valide dans le serveur. Peut être un compte de connexion basé sur un principal Windows (utilisateur ou groupe), ou un compte de connexion utilisant l'authentification SQL Server. Lorsque ce compte de connexion SQL Server accède à la base de données, il prend le nom et l'ID de l'utilisateur de base de données que vous créez. Lorsque vous créez un compte de connexion mappé à partir d'un principal Windows, utilisez le format [<domainName>\<loginName>]. Pour obtenir des exemples, consultez Résumé de syntaxe.

  • WITH DEFAULT_SCHEMA = schema_name
    Spécifie le premier schéma que le serveur doit interroger pour résoudre les noms des objets associés à cet utilisateur de base de données.

  • windows_principal'
    Spécifie le principal Windows pour lequel l'utilisateur de la base de données est créé. Le windows_principal peut être un utilisateur Windows ou un groupe Windows. L'utilisateur sera créé même si le windows_principal ne dispose pas d'un compte de connexion. Lors de la connexion à SQL Server, si le windows_principal n'a pas de compte de connexion, le principal Windows doit s'authentifier auprès du moteur de base de données via une appartenance à un groupe Windows qui dispose d'un compte de connexion, ou la chaîne de connexion doit spécifier la base de données à relation contenant-contenu comme catalogue initial. Lorsque vous créez un utilisateur à partir d'un principal Windows, utilisez le format [<domainName>\<loginName>]. Pour obtenir des exemples, consultez Résumé de syntaxe.

  • WITH PASSWORD = 'password'
    Peut être utilisé uniquement dans une base de données à relation contenant-contenu. Spécifie le mot de passe de l'utilisateur en cours de création.

  • WITHOUT LOGIN
    Indique que l'utilisateur ne doit pas être mappé à une connexion existante.

  • CERTIFICATE cert_name
    Spécifie le certificat pour lequel l'utilisateur de base de données est créé.

  • ASYMMETRIC KEY asym_key_name
    Spécifie la clé asymétrique pour laquelle l'utilisateur de base de données est créé.

  • DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> }
    Spécifie la langue par défaut du nouvel utilisateur. Si une langue par défaut est spécifiée pour l'utilisateur et que la langue par défaut de la base de données est changée ultérieurement, la langue par défaut des utilisateurs reste comme spécifié. Si aucune langue par défaut n'est spécifiée, la langue par défaut de l'utilisateur correspondra à la langue par défaut de la base de données. Si la langue par défaut n'est pas spécifiée pour l'utilisateur et que la langue par défaut de la base de données est changée ultérieurement, la langue par défaut de l'utilisateur est remplacée par la nouvelle langue par défaut de la base de données.

    Important

    DEFAULT_LANGUAGE est utilisé uniquement pour un utilisateur de base de données à relation contenant-contenu.

  • SID = sid
    S'applique uniquement aux utilisateurs munis de mots de passe (authentification SQL Server) dans une base de données à relation contenant-contenu. Spécifie le SID du nouvel utilisateur de base de données. Si cette option n'est pas sélectionnée, SQL Server attribue automatiquement un SID. Utilisez le paramètre SID pour créer des utilisateurs dans plusieurs bases de données qui ont la même identité (SID). Il est utile lorsque vous créez des utilisateurs dans plusieurs bases de données pour préparer le basculement AlwaysOn. Pour déterminer le SID d'un utilisateur, interrogez sys.database_principals.

Notes

Si vous omettez FOR LOGIN, le nouvel utilisateur de base de données est mappé à la connexion SQL Server du même nom.

Le schéma par défaut correspond au premier schéma que le serveur doit interroger pour résoudre les noms des objets associés à cet utilisateur de base de données. Sauf spécification contraire, le schéma par défaut sera le propriétaire des objets créés par cet utilisateur de la base de données.

Si l'utilisateur possède un schéma par défaut, ce schéma par défaut est utilisé. Si l'utilisateur ne possède pas de schéma par défaut, mais qu'il est membre d'un groupe qui dispose d'un schéma par défaut, le schéma par défaut du groupe est utilisé. Si l'utilisateur ne possède pas de schéma par défaut, et qu'il est membre de plus d'un groupe, le schéma par défaut de l'utilisateur sera celui du groupe Windows avec le principal_id le plus bas et un schéma par défaut défini explicite. (Il n'est pas possible de sélectionner explicitement l'un des schémas par défaut disponibles comme schéma préférentiel.) Si aucun schéma par défaut ne peut être déterminé pour un utilisateur, le schéma dbo est utilisé.

Il est possible de définir DEFAULT_SCHEMA avant de créer le schéma vers lequel il pointe.

Vous ne pouvez pas spécifier DEFAULT_SCHEMA lorsque vous créez un utilisateur mappé à un certificat ou à une clé asymétrique.

La valeur de DEFAULT_SCHEMA est ignorée si l'utilisateur est membre du rôle serveur fixe sysadmin. Tous les membres du rôle serveur fixe sysadmin possèdent le schéma par défaut dbo.

La clause WITHOUT LOGIN crée un utilisateur qui n'est pas mappé à un compte de connexion SQL Server. Il peut se connecter à d'autres bases de données en tant que guest. Les autorisations peuvent être attribuées à cet utilisateur sans compte de connexion et lorsque le contexte de sécurité est modifié en utilisateur sans compte de connexion, les utilisateurs d'origine reçoivent les autorisations de l'utilisateur sans compte de connexion. Voir l'exemple D. Création et utilisation d'un utilisateur sans connexion.

Seuls les utilisateurs mappés à des principaux Windows peuvent contenir la barre oblique inverse (\).

Vous ne pouvez pas utiliser CREATE USER pour créer un utilisateur guest, car guest existe déjà dans toutes les bases de données. Vous pouvez activer l'utilisateur guest en lui accordant l'autorisation CONNECT comme suit :

GRANT CONNECT TO guest;
GO

Les informations relatives aux utilisateurs de base de données sont visibles dans l'affichage catalogue sys.database_principals.

Résumé de syntaxe

Utilisateurs basés sur des comptes de connexions dans master

La liste suivante affiche la syntaxe possible pour les utilisateurs basés sur des comptes de connexion. Les options de schéma par défaut ne sont pas répertoriées.

  • CREATE USER [Domain1\WindowsUserBarry]

  • CREATE USER [Domain1\WindowsUserBarry] FOR LOGIN Domain1\WindowsUserBarry

  • CREATE USER [Domain1\WindowsUserBarry] FROM LOGIN Domain1\WindowsUserBarry

  • CREATE USER [Domain1\WindowsGroupManagers]

  • CREATE USER [Domain1\WindowsGroupManagers] FOR LOGIN [Domain1\WindowsGroupManagers]

  • CREATE USER [Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]

  • CREATE USER SQLAUTHLOGIN

  • CREATE USER SQLAUTHLOGIN FOR LOGIN SQLAUTHLOGIN

  • CREATE USER SQLAUTHLOGIN FROM LOGIN SQLAUTHLOGIN

Utilisateurs qui s'authentifient à la base de données

La liste suivante affiche la syntaxe possible pour les utilisateurs qui peuvent être utilisés uniquement dans une base de données à relation contenant-contenu. Les utilisateurs créés ne seront pas mis en rapport avec des comptes de connexion dans la base de données master. Les options de langue et de schéma par défaut ne sont pas répertoriées.

Remarque relative à la sécuritéRemarque relative à la sécurité

Cette syntaxe accorde l'accès d'utilisateurs à la base de données, ainsi que le nouvel accès au moteur de base de données.

  • CREATE USER [Domain1\WindowsUserBarry]

  • CREATE USER [Domain1\WindowsGroupManagers]

  • CREATE USER Barry WITH PASSWORD = 'sdjklalie8rew8337!$d'

Utilisateurs basés sur des principaux Windows sans comptes de connexion dans master

La liste suivante affiche la syntaxe possible pour les utilisateurs qui ont accès au moteur de base de données via un groupe Windows, mais qui ne disposent pas d'un compte de connexion dans master. Cette syntaxe peut être utilisée dans tous les types de bases de données. Les options de langue et de schéma par défaut ne sont pas répertoriées.

Cette syntaxe est semblable aux utilisateurs basés sur des comptes de connexion dans master, mais cette catégorie d'utilisateurs ne dispose pas de compte de connexion dans master. L'utilisateur doit avoir accès au moteur de base de données via un compte de connexion de groupe Windows.

Cette syntaxe est semblable aux utilisateurs de base de données à relation contenant-contenu basés sur des principaux Windows, mais cette catégorie d'utilisateurs n'obtient pas de nouvel accès au moteur de base de données.

  • CREATE USER [Domain1\WindowsUserBarry]

  • CREATE USER [Domain1\WindowsUserBarry] FOR LOGIN Domain1\WindowsUserBarry

  • CREATE USER [Domain1\WindowsUserBarry] FROM LOGIN Domain1\WindowsUserBarry

  • CREATE USER [Domain1\WindowsGroupManagers]

  • CREATE USER [Domain1\WindowsGroupManagers] FOR LOGIN [Domain1\WindowsGroupManagers]

  • CREATE USER [Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]

Utilisateurs qui ne peuvent pas s'authentifier

La liste suivante affiche la syntaxe possible pour les utilisateurs qui ne peuvent pas se connecter à SQL Server.

  • CREATE USER RIGHTSHOLDER WITHOUT LOGIN

  • CREATE USER CERTUSER FOR CERTIFICATE SpecialCert

  • CREATE USER CERTUSER FROM CERTIFICATE SpecialCert

  • CREATE USER KEYUSER FOR ASYMMETRIC KEY SecureKey

  • CREATE USER KEYUSER FROM ASYMMETRIC KEY SecureKey

Sécurité

La création d'un utilisateur accorde l'accès à une base de données, mais n'accorde pas automatiquement l'accès aux objets d'une base de données. Après avoir créé un utilisateur, les actions communes consistent à ajouter des utilisateurs aux rôles de base de données qui ont l'autorisation d'accéder aux objets de base de données ou d'octroyer des autorisations relatives aux objets à l'utilisateur.

Considérations spéciales pour les bases de données à relation contenant-contenu

Lors de la connexion à une base de données à relation contenant-contenu, si l'utilisateur ne dispose pas de compte de connexion dans la base de données master, la chaîne de connexion doit inclure le nom de base de données à relation contenant-contenu comme catalogue initial. Le paramètre de catalogue initial est toujours requis pour un utilisateur de base de données à relation contenant-contenu avec mot de passe.

Dans une base de données à relation contenant-contenu, la création d'utilisateurs aide à séparer la base de données de l'instance du moteur de base de données afin que la base de données puisse être déplacée facilement vers une autre instance de SQL Server. Pour plus d'informations, consultez Bases de données à relation contenant-contenu. Pour modifier un utilisateur de base de données basé sur un compte de connexion avec authentification SQL Server en utilisateur de base de données à relation contenant-contenu avec mot de passe, consultez sp_migrate_user_to_contained (Transact-SQL).

Dans une base de données à relation contenant-contenu, les utilisateurs n'ont pas besoin d'un compte de connexion dans la base de données master. Les administrateurs du Moteur de base de données doivent comprendre que l'accès à une base de données à relation contenant-contenu peut être accordé au niveau de la base de données, plutôt qu'au niveau du Moteur de base de données. Pour plus d'informations, consultez Meilleures pratiques de sécurité recommandées avec les bases de données à relation contenant-contenu.

Autorisations

Nécessite l'autorisation ALTER ANY USER sur la base de données.

Exemples

A.Création d'un utilisateur de base de données basé sur un compte de connexion SQL Server

L'exemple suivant crée d'abord un compte de connexion SQL Server nommé AbolrousHazem, puis crée un utilisateur de base de données correspondant nommé AbolrousHazem dans AdventureWorks2012.

CREATE LOGIN AbolrousHazem 
    WITH PASSWORD = '340$Uuxwp7Mcxo7Khy';
USE AdventureWorks2012;
GO
CREATE USER AbolrousHazem FOR LOGIN AbolrousHazem;
GO 

B.Création d'un utilisateur de base de données avec un schéma par défaut

L'exemple suivant crée d'abord une connexion serveur nommée WanidaBenshoof avec un mot de passe, puis crée un utilisateur de base de données correspondant nommé Wanida avec le schéma par défaut Marketing.

CREATE LOGIN WanidaBenshoof 
    WITH PASSWORD = '8fdKJl3$nlNv3049jsKK';
USE AdventureWorks2012;
CREATE USER Wanida FOR LOGIN WanidaBenshoof 
    WITH DEFAULT_SCHEMA = Marketing;
GO

C.Création d'un utilisateur de base de données à partir d'un certificat

L'exemple suivant crée un utilisateur de base de données JinghaoLiu à partir du certificat CarnationProduction50.

USE AdventureWorks2012;
CREATE CERTIFICATE CarnationProduction50
    WITH SUBJECT = 'Carnation Production Facility Supervisors',
    EXPIRY_DATE = '11/11/2011';
GO
CREATE USER JinghaoLiu FOR CERTIFICATE CarnationProduction50;
GO 

D.Création et utilisation d'un utilisateur sans connexion

L'exemple suivant crée un utilisateur de base de données CustomApp qui n'est mappé à aucune connexion SQL Server. L'exemple accorde ensuite à un utilisateur adventure-works\tengiz0 l'autorisation d'emprunter l'identité de l'utilisateur CustomApp.

USE AdventureWorks2012 ;
CREATE USER CustomApp WITHOUT LOGIN ;
GRANT IMPERSONATE ON USER::CustomApp TO [adventure-works\tengiz0] ;
GO 

Pour utiliser les informations d'identification CustomApp, l'utilisateur adventure-works\tengiz0 exécute l'instruction suivante.

EXECUTE AS USER = 'CustomApp' ;
GO

Pour revenir aux informations d'identification adventure-works\tengiz0, l'utilisateur exécute l'instruction suivante.

REVERT ;
GO

E.Création d'un utilisateur de base de données à relation contenant-contenu avec mot de passe

L'exemple suivant crée un utilisateur de base de données à relation contenant-contenu avec mot de passe. Cet exemple ne peut être exécuté que dans une base de données à relation contenant-contenu.

USE AdventureWorks2012 ;
GO
CREATE USER Carlo
WITH PASSWORD='RN92piTCh%$!~3K9844 Bl*'
    , DEFAULT_LANGUAGE=[Brazilian]
    , DEFAULT_SCHEMA=[dbo]
GO 

F.Création d'un utilisateur de base de données à relation contenant-contenu pour un compte de connexion de domaine

L'exemple suivant crée un utilisateur de base de données à relation contenant-contenu pour une connexion nommée Fritz dans un domaine appelé Contoso. Cet exemple ne peut être exécuté que dans une base de données à relation contenant-contenu.

USE AdventureWorks2012 ;
GO
CREATE USER [Contoso\Fritz] ;
GO 

G.Création d'un utilisateur de base de données à relation contenant-contenu avec un SID spécifique

L'exemple suivant crée un utilisateur de base de données à relation contenant-contenu authentifié par SQL Server et nommé CarmenW. Cet exemple ne peut être exécuté que dans une base de données à relation contenant-contenu.

USE AdventureWorks2012 ;
GO
CREATE USER CarmenW WITH PASSWORD = 'a8ea v*(Rd##+'
, SID = 0x01050000000000090300000063FF0451A9E7664BA705B10E37DDC4B7;

Voir aussi

Référence

sys.database_principals (Transact-SQL)

ALTER USER (Transact-SQL)

DROP USER (Transact-SQL)

CREATE LOGIN (Transact-SQL)

EVENTDATA (Transact-SQL)

Concepts

Créer un utilisateur de base de données

Bases de données à relation contenant-contenu