CREATE USER (Transact-SQL)

Agrega un usuario a la base de datos actual. Hay once tipos de usuarios:

Usuarios basados en inicios de sesión en la base de datos maestra: se trata del tipo más habitual de usuario.

  • Usuario basado en un inicio de sesión basado en un usuario de Windows.

  • Usuario basado en un inicio de sesión basado en un grupo de Windows.

  • Usuario basado en un inicio de sesión mediante autenticación de SQL Server.

Usuarios que se autentican en la base de datos: solo se admiten en una base de datos independiente.

  • Usuario basado en un usuario de Windows sin inicio de sesión.

  • Usuario basado en un grupo de Windows sin inicio de sesión.

  • Usuario de base de datos independiente con contraseña.

Usuarios basados en entidades de seguridad de Windows que conectan a través de inicios de sesión de grupo de Windows

  • Usuario basado en un usuario de Windows sin inicio de sesión, pero que se puede conectar a Motor de base de datos mediante la pertenencia a un grupo de Windows.

  • Usuario basado en un grupo de Windows sin inicio de sesión, pero que se puede conectar a Motor de base de datos mediante la pertenencia a un grupo distinto de Windows.

Usuarios que no se pueden autenticar: estos usuarios no pueden iniciar sesión en SQL Server.

  • Usuario sin inicio de sesión. No puede iniciar sesión, pero se le pueden conceder permisos.

  • Usuario basado en un certificado. No puede iniciar sesión, pero se le pueden conceder permisos y puede firmar módulos.

  • Usuario basado en una clave asimétrica. No puede iniciar sesión, pero se le pueden conceder permisos y puede firmar módulos.

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

  • user_name
    Especifica el nombre por el que se identifica al usuario en esta base de datos. user_name es de tipo sysname. Puede tener una longitud máxima de 128 caracteres. Cuando se crea un usuario basado en una entidad de seguridad de Windows, el nombre de esta entidad se convierte en el nombre de usuario a menos que se especifique otro nombre de usuario.

  • LOGIN login_name
    Especifica el inicio de sesión para el que se crea el usuario de base de datos. login_name debe ser un inicio de sesión válido en el servidor. Puede ser un inicio de sesión basado en una entidad de seguridad de Windows (usuario o grupo) o un inicio de sesión con autenticación de SQL Server. Cuando este inicio de sesión de SQL Server se introduce en la base de datos adquiere el nombre y el identificador del usuario de la base de datos que se está creando. Cuando cree un inicio de sesión asignado a una entidad de seguridad de Windows, use el formato [<domainName>\<loginName>]. Para obtener ejemplos, vea Resumen de sintaxis.

  • WITH DEFAULT_SCHEMA = schema_name
    Especifica el primer esquema donde buscará el servidor cuando resuelva los nombres de objetos de este usuario de base de datos.

  • windows_principal'
    Especifica la entidad de seguridad de Windows para la que se crea el usuario de base de datos. El parámetro windows_principal puede ser un usuario o un grupo de Windows. El usuario se creará aunque el parámetro windows_principal no disponga de inicio de sesión. Cuando se conecte a SQL Server, si el parámetro windows_principal no dispone de inicio de sesión, la entidad de seguridad de Windows se debe autenticar en Motor de base de datos mediante la pertenencia a un grupo de Windows que disponga de inicio de sesión o la cadena de conexión debe especificar la base de datos independiente como el catálogo inicial. Cuando cree un usuario a partir de una entidad de seguridad de Windows, use el formato [<domainName>\<loginName>]. Para obtener ejemplos, vea Resumen de sintaxis.

  • WITH PASSWORD = 'password'
    Solo se puede usar en una base de datos independiente. Especifica la contraseña del usuario que se está creando.

  • WITHOUT LOGIN
    Especifica que el usuario no se debe asignar a ningún inicio de sesión existente.

  • CERTIFICATE cert_name
    Especifica el certificado del usuario de la base de datos que se crea.

  • ASYMMETRIC KEY asym_key_name
    Especifica la clave asimétrica del usuario de la base de datos que se crea.

  • DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> }
    Especifica el idioma predeterminado del nuevo usuario. Si se especifica un idioma predeterminado para el usuario y el idioma de la base de datos se cambia posteriormente, el idioma predeterminado de los usuarios se mantiene como se especificó. Si no se especifica ningún idioma predeterminado, el idioma predeterminado del usuario será el idioma predeterminado de la base de datos. Si no se especificó ningún idioma predeterminado para el usuario y el idioma predeterminado de la base de datos se cambia posteriormente, el idioma predeterminado del usuario se cambiará al nuevo idioma predeterminado de la base de datos.

    Nota importanteImportante

    El parámetro DEFAULT_LANGUAGE solo se usa para un usuario de base de datos independiente.

  • SID = sid
    Solo se aplica a los usuarios con las contraseñas (autenticación deSQL Server) en una base de datos independiente. Especifica el SID de la base de datos. Si esta opción no se selecciona, SQL Server asigna automáticamente un SID. Utilice el parámetro SID para crear usuarios en varias bases de datos que tienen la misma identidad (SID). Esto es útil para crear usuarios de varias bases de datos y preparar la conmutación por error de AlwaysOn. Para determinar el SID del usuario, vea sys.database_principals.

Comentarios

Si se omite FOR LOGIN, el nuevo usuario de base de datos se asignará al inicio de sesión de SQL Server con el mismo nombre.

El esquema predeterminado será el primer esquema donde buscará el servidor cuando resuelva los nombres de objetos de este usuario de base de datos. A menos que se especifique lo contrario, el esquema predeterminado será el propietario de los objetos creados por este usuario de base de datos.

Si el usuario tiene un esquema predeterminado, se utilizará dicho esquema. Si el usuario no tiene un esquema predeterminado pero es miembro de un grupo con un esquema predeterminado, se utilizará el esquema predeterminado del grupo. Si el usuario no tiene un esquema predeterminado y es miembro de varios grupos, el esquema predeterminado para el usuario será el del grupo de Windows con el principal_id mínimo y un esquema predeterminado establecido explícitamente. No es posible seleccionar explícitamente uno de los esquemas predeterminados disponibles como esquema preferido. Si no se puede determinar ningún esquema predeterminado para un usuario, se utilizará el esquema dbo.

DEFAULT_SCHEMA puede establecerse antes de crear el esquema que lo señala.

No se puede especificar DEFAULT_SCHEMA cuando se está creando un usuario asignado a un certificado o una clave asimétrica.

El valor de DEFAULT_SCHEMA se omite si el usuario es un miembro del rol fijo de servidor sysadmin. Todos los miembros del rol fijo de servidor sysadmin tienen un esquema predeterminado de dbo.

La cláusula WITHOUT LOGIN crea un usuario que no se asigna a ningún inicio de sesión de SQL Server. Este usuario puede conectarse a otras bases de datos como guest. Se pueden asignar permisos a este usuario sin inicio de sesión y cuando cambie el contexto de seguridad a un usuario sin inicio de sesión, el usuario original recibe el permiso del usuario sin inicio de sesión. Vea el ejemplo D. Crear y utilizar un usuario sin inicio de sesión.

Solo los usuarios asignados a entidades de seguridad de Windows pueden contener el carácter de barra diagonal inversa (\).

No se puede usar CREATE USER para crear ningún usuario guest porque el usuario guest ya existe en todas las bases de datos. Puede habilitar el usuario guest concediéndole el permiso CONNECT como se muestra a continuación:

GRANT CONNECT TO guest;
GO

Puede ver la información acerca de los usuarios de bases de datos en la vista de catálogo sys.database_principals.

Resumen de la sintaxis

Usuarios basados en inicios de sesión en la base de datos maestra

En la siguiente lista se muestra la posible sintaxis de los usuarios basados en inicios de sesión. No se citan las opciones de esquema predeterminadas.

  • 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

Usuarios que se autentican en la base de datos

En la siguiente lista se muestra la posible sintaxis de los usuarios que solo se puede usar en una base de datos independiente. Los usuarios creados no se podrán relacionar con los inicios de sesión en la base de datos maestra. No se muestran las opciones predeterminadas de esquema ni de idioma.

Nota de seguridadNota de seguridad

Esta sintaxis concede acceso a los usuarios a la base de datos, así como nuevo acceso a Motor de base de datos.

  • CREATE USER [Domain1\WindowsUserBarry]

  • CREATE USER [Domain1\WindowsGroupManagers]

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

Usuarios basados en entidades de seguridad de Windows sin inicios de sesión en la base de datos maestra

En la siguiente lista se muestra la posible sintaxis para los usuarios que tienen acceso a Motor de base de datos mediante un grupo de Windows, pero que no disponen de inicio de sesión en la base de datos maestra. Esta sintaxis se puede usar en todos los tipos de bases de datos. No se muestran las opciones predeterminadas de esquema ni de idioma.

Esta sintaxis es similar a la de los usuarios basados en inicios de sesión en la base de datos maestra, pero esta categoría no dispone de inicio de sesión en dicha base de datos. El usuario debe tener acceso a Motor de base de datos mediante un inicio de sesión de grupo de Windows.

Esta sintaxis es similar a la de los usuarios de bases de datos independientes basados en las entidades de seguridad de Windows, pero esta categoría de usuario no obtiene nuevo acceso a Motor de base de datos.

  • 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]

Usuarios que no se pueden autenticar

En la siguiente lista se muestra la posible sintaxis para los usuarios que no pueden iniciar sesión en 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

Seguridad

Si se crea un usuario, se le concede acceso a una base de datos, pero no se le concede ningún acceso automáticamente a los objetos de una base de datos. Después de crear un usuario, las acciones habituales son agregar a los usuarios a los roles de base de datos con permiso para acceder a los objetos de la base de datos o conceder permisos de objeto al usuario.

Consideraciones especiales para bases de datos independientes

Cuando se conecte a una base de datos independiente, si el usuario no dispone de inicio de sesión en la base de datos maestra, la cadena de conexión se debe incluir en el nombre de la base de datos independiente como el catálogo inicial. El parámetro de catálogo inicial siempre es necesario para un usuario de base de datos independiente con contraseña.

En una base de datos independiente, la creación de usuarios ayuda a separar la base de datos de la instancia de Motor de base de datos para que la base de datos se pueda mover fácilmente a otra instancia de SQL Server. Para obtener más información, vea Bases de datos independientes. Para cambiar un usuario de base de datos de un usuario basado en un inicio de sesión de autenticación de SQL Server a un usuario de base de datos independiente con contraseña, vea sp_migrate_user_to_contained (Transact-SQL).

En una base de datos independiente, los usuarios no deben disponer de inicios de sesión en la base de datos maestra. Los administradores del Motor de base de datos deben comprender que el acceso a una base de datos independiente se puede conceder en el nivel de base de datos, en vez de en el nivel de Motor de base de datos. Para obtener más información, vea Prácticas recomendadas de seguridad con bases de datos independientes.

Permisos

Requiere el permiso ALTER ANY USER en la base de datos.

Ejemplos

A.Crear un usuario de base de datos basado en un inicio de sesión de SQL Server

En el siguiente ejemplo, primero se crea un inicio de sesión de SQL Server denominado AbolrousHazem y, a continuación, se crea un usuario de base de datos correspondiente AbolrousHazem en AdventureWorks2012.

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

B.Crear un usuario de base de datos con un esquema predeterminado

En el siguiente ejemplo, primero se crea un inicio de sesión de servidor denominado WanidaBenshoof con una contraseña y, a continuación, se crea el usuario de base de datos Wanida correspondiente con el esquema predeterminado Marketing.

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

C.Crear un usuario de base de datos a partir de un certificado

En el siguiente ejemplo, se crea el usuario de base de datos JinghaoLiu desde el certificado 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.Crear y utilizar un usuario sin inicio de sesión

En el ejemplo siguiente se crea un usuario de base de datos CustomApp que no se asigna a un inicio de sesión de SQL Server. A continuación, se concede a un usuario el permiso adventure-works\tengiz0 para suplantar al usuario de CustomApp.

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

Para usar las credenciales de CustomApp, el usuario adventure-works\tengiz0 ejecuta la siguiente instrucción.

EXECUTE AS USER = 'CustomApp' ;
GO

Para revertir a las credenciales de adventure-works\tengiz0, el usuario ejecuta la siguiente instrucción.

REVERT ;
GO

E.Crear un usuario de base de datos independiente con contraseña

En el siguiente ejemplo se crea un usuario de base de datos independiente con contraseña. Este ejemplo solo se puede ejecutar en una base de datos independiente.

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

F.Crear un usuario de base de datos independiente para un inicio de sesión de dominio

En el siguiente ejemplo se crea un usuario de base de datos independiente para un inicio de sesión denominado Fritz en un dominio denominado Contoso. Este ejemplo solo se puede ejecutar en una base de datos independiente.

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

G.Crear un usuario de base de datos independiente con un SID específico

En el siguiente ejemplo se crea un usuario de base de datos independiente y autenticado de SQL Server denominado CarmenW. Este ejemplo solo se puede ejecutar en una base de datos independiente.

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

Vea también

Referencia

sys.database_principals (Transact-SQL)

ALTER USER (Transact-SQL)

DROP USER (Transact-SQL)

CREATE LOGIN (Transact-SQL)

EVENTDATA (Transact-SQL)

Conceptos

Crear un usuario de base de datos

Bases de datos independientes