ALTER USER (Transact-SQL)

Cambia el nombre de un usuario de base de datos o cambia su esquema predeterminado.

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

Sintaxis

ALTER USER userName  
     WITH <set_item> [ ,...n ]

<set_item> ::= 
      NAME = newUserName 
    | DEFAULT_SCHEMA = { schemaName | NULL }
    | LOGIN = loginName
    | PASSWORD = 'password' [ OLD_PASSWORD = 'oldpassword' ]
    | DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> }

Argumentos

  • userName
    Especifica el nombre por el que se identifica al usuario en esta base de datos.

  • LOGIN **=**loginName
    Reasigna un usuario a otro inicio de sesión cambiando el identificador de seguridad (SID) del usuario para que coincida con el SID de inicio de sesión.

  • NAME **=**newUserName
    Especifica el nuevo nombre de este usuario. newUserName no debe existir en la base de datos actual.

  • DEFAULT_SCHEMA = { schemaName | NULL }
    Especifica el primer esquema donde buscará el servidor cuando resuelva los nombres de objetos de este usuario. El establecimiento del esquema predeterminado en NULL quita un esquema predeterminado de un grupo de Windows. La opción NULL no se puede utilizar con un usuario de Windows.

  • PASSWORD = 'password'
    Especifica la contraseña del usuario que se está cambiando. En las contraseñas se distingue entre mayúsculas y minúsculas.

    [!NOTA]

    Esta opción solo está disponible para los usuarios contenidos. Vea Bases de datos independientes y sp_migrate_user_to_contained (Transact-SQL) para obtener más información.

  • OLD_PASSWORD ='oldpassword'
    La contraseña de usuario actual que se reemplazará por 'password'. En las contraseñas se distingue entre mayúsculas y minúsculas. Se requiere OLD_PASSWORD para cambiar una contraseña, a menos que se tenga el permiso ALTER ANY USER. Al requerir OLD_PASSWORD, se impide que los usuarios con el permiso IMPERSONATION cambien la contraseña.

    [!NOTA]

    Esta opción solo está disponible para los usuarios contenidos.

  • DEFAULT_LANGUAGE ={ NONE | <lcid> | <language name> | <language alias> }
    Especifica el idioma predeterminado que debe asignarse al usuario. Si esta opción se establece en NONE, el idioma predeterminado se establece en el de la base de datos. Si el idioma predeterminado de la base de datos se cambia más tarde, el idioma predeterminado del usuario no se modificará. DEFAULT_LANGUAGE puede ser el ID local (lcid), el nombre del idioma o el alias del idioma.

    [!NOTA]

    Esta opción solo se puede especificar en una base de datos independiente y solo para los usuarios independientes.

Comentarios

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 principle_id mínimo y un esquema predeterminado establecido explícitamente. Si no se puede determinar ningún esquema predeterminado para un usuario, se utilizará el esquema dbo.

DEFAULT_SCHEMA puede establecerse en un esquema que no existe actualmente en la base de datos. Por tanto, puede asignar un DEFAULT_SCHEMA a un usuario antes de crear el esquema.

No se puede especificar DEFAULT_SCHEMA para un usuario asignado a un certificado o una clave asimétrica.

Nota importanteImportante

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 dbo.

Solo puede cambiar el nombre de un usuario que está asignado a un grupo o inicio de sesión de Windows cuando el SID del nuevo nombre de usuario coincide con el SID registrado en la base de datos. Esta comprobación ayuda a evitar la suplantación de inicios de sesión de Windows en la base de datos.

La cláusula WITH LOGIN habilita la reasignación de un usuario a un inicio de sesión diferente. Los usuarios sin inicio de sesión, los usuarios asignados a un certificado y los usuarios asignados a una clave asimétrica no se pueden reasignar con esta cláusula. Solo se pueden reasignar usuarios de SQL y usuarios (o grupos) de Windows. La cláusula WITH LOGIN no se puede utilizar para cambiar el tipo de usuario, como cambiar una cuenta de Windows a un inicio de sesión de SQL Server.

El nombre del usuario se cambiará automáticamente por el nombre de inicio de sesión si se cumplen las condiciones siguientes.

  • El usuario es un usuario de Windows.

  • El nombre es un nombre de Windows (contiene una barra diagonal inversa).

  • No se ha especificado ningún nombre nuevo.

  • El nombre actual difiere del nombre de inicio de sesión.

En caso contrario, no se cambiará el nombre del usuario a menos que el autor de las llamadas invoque también la cláusula NAME.

El nombre de un usuario asignado a un inicio de sesión de SQL Server, un certificado o una clave asimétrica no puede contener el carácter de la barra diagonal inversa (\).

Nota de advertenciaAdvertencia

El comportamiento de los esquemas cambió en SQL Server 2005. En consecuencia, el código que supone que los esquemas son equivalentes a los usuarios de base de datos puede dejar de devolver resultados correctos. Las antiguas vistas de catálogo, incluida sysobjects, no se deben usar en una base de datos en la que se haya utilizado alguna vez cualquiera de las siguientes instrucciones DDL: CREATE SCHEMA, ALTER SCHEMA, DROP SCHEMA, CREATE USER, ALTER USER, DROP USER, CREATE ROLE, ALTER ROLE, DROP ROLE, CREATE APPROLE, ALTER APPROLE, DROP APPROLE, ALTER AUTHORIZATION. En esas bases de datos, debe usar las nuevas vistas de catálogo. En las nuevas vistas de catálogo se tiene en cuenta la separación de entidades de seguridad y esquemas que se estableció en SQL Server 2005. Para obtener más información sobre las vistas de catálogo, vea Vistas de catálogo (Transact-SQL).

Seguridad

[!NOTA]

Un usuario que tenga permiso ALTER ANY USER puede cambiar el esquema predeterminado de cualquier usuario. Un usuario que tenga un esquema modificado podría seleccionar datos de la tabla incorrecta o ejecutar código del esquema incorrecto sin saberlo.

Permisos

Para cambiar el nombre de un usuario se necesita el permiso ALTER ANY USER.

Para cambiar el nombre de usuario, el inicio de sesión de destino o el SID de un usuario que tenga el permiso CONTROL en la base de datos se necesita el permiso CONTROL en la base de datos.

Para cambiar el esquema predeterminado o el idioma, se requiere el permiso ALTER en el usuario. Los usuarios solo pueden cambiar su idioma o su propio esquema predeterminado.

Ejemplos

A.Cambiar el nombre de usuario de una base de datos

En el ejemplo siguiente se cambia el nombre del usuario de la base de datos Mary5 a Mary51.

USE AdventureWorks2012;
ALTER USER Mary5 WITH NAME = Mary51;
GO

B.Cambiar el esquema predeterminado de un usuario

En el ejemplo siguiente se cambia el esquema predeterminado del usuario de Mary51 a Purchasing.

USE AdventureWorks2012;
ALTER USER Mary51 WITH DEFAULT_SCHEMA = Purchasing;
GO

C.Cambiar varias opciones a la vez

En el siguiente ejemplo se cambian varias opciones para un usuario de base de datos independiente en una instrucción.

USE AdventureWorks2012;
GO 
ALTER USER Philip 
WITH  NAME = Philipe 
    , DEFAULT_SCHEMA = Development 
    , PASSWORD = 'W1r77TT98%ab@#’ OLD_PASSWORD = 'New Devel0per' 
    , DEFAULT_LANGUAGE  = French ;
GO

Vea también

Referencia

CREATE USER (Transact-SQL)

DROP USER (Transact-SQL)

EVENTDATA (Transact-SQL)

sp_migrate_user_to_contained (Transact-SQL)

Conceptos

Bases de datos independientes