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_contained se puede usar antes de mover la base de datos independiente a una instancia diferente 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.

Nota:

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'user'
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 | '
disable_login deshabilita el inicio de sesión en la base de datos maestra. Para conectarse cuando el inicio de sesión está deshabilitado, la conexión debe proporcionar el nombre de la base de datos independiente como catálogo inicial como parte del cadena de conexión.

Valores de código de retorno

0 (correcto) o 1 (error)

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 permiso CONNECT a la base de datos.

sp_migrate_user_to_contained tiene las restricciones siguientes.

  • El nombre de usuario no puede existir ya en la base de datos.

  • Los usuarios integrados, por ejemplo dbo y guest, no se pueden convertir.

  • El usuario no se puede especificar en la cláusula EXECUTE AS de un procedimiento almacenado firmado.

  • El usuario no puede poseer un procedimiento almacenado que incluya la cláusula EXECUTE AS OWNER .

  • 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 Conectar a SQL Server Cuando el sistema Administración istrators están bloqueados.

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

Permisos

Requiere el permiso CONTROL SERVER .

Ejemplos

A Realizar la migración de un usuario único

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.

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

B. Realizar la migración de todos los usuarios de la base de datos con inicios de sesión a usuarios de base de datos independiente sin inicio 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  
        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 ;  

Consulte también

Migrar a una base de datos parcialmente independiente
Bases de datos independientes