sp_migrate_user_to_contained (Transact-SQL)
Convierte a 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, utilice este procedimiento para quitar las dependencias sobre la instancia de SQL Server donde se instala la base de datos. sp_migrate_user_to_contained separa al usuario del inicio de sesión de SQL Server original, de forma que los valores tales como contraseña e idioma predeterminado se puedan administrar independientemente para la base de datos independiente. sp_migrate_user_to_contained se puede utilizar antes de mover la base de datos independiente a una instancia diferente de Motor de base de datos de SQL Server para eliminar las dependencias sobre los inicios de sesión de la instancia actual de SQL Server.
Nota Este procedimiento solo se utiliza en una base de datos independiente. Para obtener más información, vea Bases de datos independientes.
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 en la base de datos independiente actual asignado a un inicio de sesión autenticado en SQL Server. El valor es sysname, con un valor predeterminado NULL.[@rename = ] N'copy_login_name' | N'keep_name'
Cuando un usuario de la base de datos basado en inicio de sesión tiene un nombre de usuario diferente del nombre de inicio de sesión, utilice keep_name para mantener el nombre de usuario de la base de datos durante la migración. Utilice copy_login_name para crear el nuevo usuario de la 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 conectar cuando el inicio de sesión está deshabilitado, la conexión debe proporcionar el nombre de la base de datos independiente como initial catalog formando parte de la cadena de conexión.
Valores de código de retorno
0 (correcto) o 1 (error)
Comentarios
sp_migrate_user_to_contained crea al usuario de la base de datos independiente con contraseña, sin tener en cuenta las propiedades o permisos del inicio de sesión. Por ejemplo, el procedimiento puede tener éxito si el inicio de sesión está deshabilitado o si al usuario se le deniega el permiso CONNECT para la base de datos.
sp_migrate_user_to_contained tiene las siguientes restricciones.
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 utilizar en una base de datos del sistema.
Seguridad
Al realizar la migración de los usuarios, tenga el cuidado de no deshabilitar o eliminar todos los inicios de sesión de administrador de la instancia de SQL Server. Si se eliminan todos los inicios de sesión, vea Conectarse a SQL Server cuando los administradores del sistema no tienen acceso.
Si el inicio de sesión BUILTIN\Administrators está presente, los administradores se pueden conectar iniciando su aplicación mediante la opción Ejecutar como administrador.
Permisos
Requiere el permiso CONTROL SERVER.
Ejemplos
A.Realizar la migración de un usuario único
En el siguiente ejemplo, se realiza una migración de un inicio de sesión de SQL Server denominado Barry a un usuario de base de datos independiente con contraseña. El ejemplo conserva el nombre de usuario y mantiene 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 ;