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 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;