sp_migrate_user_to_contained (Transact-SQL)
Converte um usuário do banco de dados que foi mapeado para um logon do SQL Server em um usuário do banco de dados independente com senha. Em um banco de dados independente, use este procedimento para remover dependências na instância do SQL Server onde o banco de dados está instalado. sp_migrate_user_to_contained separa o usuário do logon original do SQL Server, de forma que configurações, como senha e idioma padrão, podem ser administradas separadamente para o banco de dados independente. sp_migrate_user_to_contained pode ser usado antes de mover o banco de dados independente para uma instância diferente do Mecanismo de Banco de Dados do SQL Server para eliminar dependências dos logons atuais da instância do SQL Server.
Observação: este procedimento é usado somente em bancos de dados independentes. Para obter mais informações, consulte Bancos de dados contidos.
Sintaxe
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'
Nome de um usuário do banco de dados independente atual que é mapeado para um logon autenticado do SQL Server. O valor é sysname, com o padrão NULL.[@rename = ] N'copy_login_name' | N'keep_name'
Quando um usuário de banco de dados baseado em um logon tem um nome de usuário diferente do nome de logon, use keep_name para manter o nome de usuário do banco de dados durante a migração. Use copy_login_name para criar o novo usuário de banco de dados independente com o nome do logon, em vez do usuário. Quando um usuário de banco de dados baseado em um logon tem o mesmo nome de usuário do nome de logon, as duas opções criam o usuário do banco de dados independente, sem alterar o nome.[@disablelogin = ] N'disable_login' | N'do_not_disable_login'
disable_login desabilita o logon no banco de dados mestre. Para se conectar quando o logon estiver desabilitado, a conexão deve fornecer o nome do banco de dados independente como initial catalog, como parte da cadeia de conexão.
Valores de código de retorno
0 (êxito) ou 1 (falha)
Comentários
sp_migrate_user_to_contained cria o usuário de banco de dados independente com senha, independentemente das propriedades ou permissões do logon. Por exemplo, o procedimento pode ter êxito se o logon estiver desabilitado ou se a permissão CONNECT para o banco de dados for negada ao usuário.
sp_migrate_user_to_contained tem as restrições a seguir.
O nome de usuário não pode existir no banco de dados.
Usuários internos, como dbo e guest, não podem ser convertidos.
O usuário não pode ser especificado na cláusula EXECUTE AS de um procedimento armazenado assinado.
O usuário não pode possuir um procedimento armazenado que inclua a cláusula EXECUTE AS OWNER.
Não é possível usar sp_migrate_user_to_contained em um banco de dados do sistema.
Segurança
Ao migrar usuários, tenha cuidado para não desabilitar ou excluir todos os logons de administrador da instância do SQL Server. Se todos os logons forem excluídos, consulte Conectar-se ao SQL Server quando os administradores do sistema estão bloqueados.
Se o logon BUILTIN\Administrators estiver presente, os administradores poderão se conectar iniciando o aplicativo com a opção Executar como Administrador.
Permissões
Exige a permissão CONTROL SERVER.
Exemplos
A.Migrando um único usuário
O exemplo a seguir migra um logon do SQL Server denominado Barry para um usuário de banco de dados independente com senha. O exemplo não altera o nome de usuário e mantém o logon como habilitado.
sp_migrate_user_to_contained
@username = N'Barry',
@rename = N'keep_name',
@disablelogin = N'do_not_disable_login' ;
B.Migrando todos os usuários do banco de dados com logons para usuários de bancos de dados independentes sem logons
O exemplo a seguir migra todos os usuários baseados em logons do SQL Server para usuários de bancos de dados independentes com senhas. O exemplo exclui os logons que não estão habilitados. O exemplo deve ser executado no banco de dados independente.
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 ;