Compartir a través de


sp_migrate_user_to_contained (Transact-SQL)

Se aplica a: SQL Server

Convierte un usuario de base de datos asignado a un inicio de sesión de SQL Server en un usuario de base de datos independiente con contraseña. En una base de datos independiente, use este procedimiento para quitar dependencias en la instancia de SQL Server donde está instalada la base de datos. sp_migrate_user_to_contained separa al usuario del inicio de sesión de SQL Server original, de modo que la configuración como la contraseña y el idioma predeterminado se puedan administrar por separado para la base de datos independiente.

sp_migrate_user_to_containedse puede usar antes de mover la base de datos independiente a otra instancia del Motor de base de datos de SQL Server para eliminar las dependencias de los inicios de sesión actuales de la instancia de SQL Server.

Precaución

Tenga cuidado al usar sp_migrate_user_to_contained, ya que no podrá revertir el efecto. Este procedimiento solo se usa en una base de datos independiente. Para más información, consulte Contained Databases.

Sintaxis

sp_migrate_user_to_contained [ @username = ] N'user' ,
    [ @rename = ] { N'copy_login_name' | N'keep_name' } ,
    [ @disablelogin = ] { N'disable_login' | N'do_not_disable_login' }
[ ; ]

Argumentos

[ @username = ] N'username'

Nombre de un usuario de la base de datos independiente actual que se asigna a un inicio de sesión autenticado de SQL Server. El valor es sysname, con un valor predeterminado de NULL.

[ @rename = ] N'copy_login_name' | N'keep_name'

Cuando un usuario de base de datos basado en un inicio de sesión tiene un nombre de usuario diferente al nombre de inicio de sesión, use keep_name para conservar el nombre de usuario de la base de datos durante la migración. Use copy_login_name para crear el nuevo usuario de base de datos independiente con el nombre del inicio de sesión, en lugar del usuario. Cuando un usuario de la base de datos basado en inicio de sesión tiene el mismo nombre de usuario que el nombre de inicio de sesión, ambas opciones crean el usuario de la base de datos independiente sin cambiar el nombre.

[ @disablelogin = ] N'disable_login' | N'do_not_disable_login'

Se usa para deshabilitar el inicio de sesión en la master base de datos. Para conectarse cuando el inicio de sesión está deshabilitado, la conexión debe proporcionar el nombre de la base de datos independiente como initial catalog parte del cadena de conexión.

Valores de código de retorno

0 (correcto) o 1 (erróneo).

Comentarios

sp_migrate_user_to_contained crea el usuario de base de datos independiente con contraseña, independientemente de las propiedades o permisos del inicio de sesión. Por ejemplo, el procedimiento puede realizarse correctamente si el inicio de sesión está deshabilitado o si se deniega el CONNECT permiso a la base de datos.

sp_migrate_user_to_contained tiene las restricciones siguientes.

  • El nombre de usuario aún no puede existir en la base de datos.
  • Los usuarios integrados, por ejemplo , dbo e invitado, no se pueden convertir.
  • El usuario no se puede especificar en la EXECUTE AS cláusula de un procedimiento almacenado firmado.
  • El usuario no puede poseer un procedimiento almacenado que incluya la EXECUTE AS OWNER cláusula .
  • sp_migrate_user_to_contained no se puede usar en una base de datos del sistema.

Seguridad

Al migrar usuarios, tenga cuidado de no deshabilitar ni eliminar todos los inicios de sesión de administrador de la instancia de SQL Server. Si se eliminan todos los inicios de sesión, consulte Conexión a SQL Server cuando los administradores del sistema estén bloqueados.

Si el inicio de BUILTIN\Administrators sesión está presente, los administradores pueden conectarse iniciando su aplicación mediante la opción Ejecutar como administrador .

Permisos

Requiere el permiso CONTROL SERVER.

Ejemplos

A Migración de un único usuario

En el ejemplo siguiente se migra un inicio de sesión de SQL Server denominado Barry, a un usuario de base de datos independiente con contraseña. El ejemplo no cambia el nombre de usuario y conserva el inicio de sesión como habilitado.

EXEC sp_migrate_user_to_contained @username = N'Barry',
    @rename = N'keep_name',
    @disablelogin = N'do_not_disable_login';

B. Migración de todos los usuarios de base de datos con inicios de sesión a usuarios de base de datos independientes sin inicios de sesión

En el siguiente ejemplo, se realiza la migración de todos los usuarios basados en inicio de sesión de SQL Server a usuarios de base de datos independiente con contraseñas. En el ejemplo se excluyen los inicios de sesión que no están habilitados. El ejemplo se debe ejecutar en la base de datos independiente.

DECLARE @username SYSNAME;

DECLARE user_cursor CURSOR
FOR
SELECT dp.name
FROM sys.database_principals AS dp
INNER JOIN sys.server_principals AS sp
    ON dp.sid = sp.sid
WHERE dp.authentication_type = 1
    AND sp.is_disabled = 0;

OPEN user_cursor

FETCH NEXT
FROM user_cursor
INTO @username

WHILE @@FETCH_STATUS = 0
BEGIN
    EXECUTE sp_migrate_user_to_contained @username = @username,
        @rename = N'keep_name',
        @disablelogin = N'disable_login';

    FETCH NEXT
    FROM user_cursor
    INTO @username
END

CLOSE user_cursor;

DEALLOCATE user_cursor;