sp_migrate_user_to_contained (Transact-SQL)

Aplica-se a:SQL Server

Converte um usuário de banco de dados mapeado para um logon do SQL Server em um usuário de banco de dados contido com senha. Em um banco de dados contido, use este procedimento para remover dependências na instância do SQL Server em que o banco de dados está instalado. sp_migrate_user_to_contained separa o usuário do logon original do SQL Server, para que configurações como senha e idioma padrão possam ser administradas separadamente para o banco de dados contido. sp_migrate_user_to_contained pode ser usado antes de mover o banco de dados contido para uma instância diferente do Mecanismo de Banco de Dados do SQL Server para eliminar dependências nos logons de instância atuais do SQL Server.

Observação

Tenha cuidado ao usar sp_migrate_user_to_contained, pois você não será capaz de reverter o efeito. Esse procedimento só é usado em um banco de dados contido. Para obter mais informações, veja Bancos de dados independentes.

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'usuário'
Nome de um usuário no banco de dados contido atual que é mapeado para um logon autenticado do SQL Server. O valor é sysname, com um padrão de NULL.

[@rename = ] N'copy_login_name'N'keep_name' |
Quando um usuário de banco de dados baseado em um logon tiver um nome de usuário diferente do nome de logon, use keep_name para reter 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 contido 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 contido como o catálogo inicial como parte da cadeia de conexão.

Valores do código de retorno

0 (êxito) ou 1 (falha)

Comentários

sp_migrate_user_to_contained cria o usuário do banco de dados contido com senha, independentemente das propriedades ou permissões do logon. Por exemplo, o procedimento pode ser bem-sucedido se o logon estiver desabilitado ou se o usuário tiver a permissão CONNECT negada ao banco de dados.

sp_migrate_user_to_contained tem as seguintes restrições.

  • 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 inclui a cláusula EXECUTE AS OWNER .

  • sp_migrate_user_to_contained não pode ser usado 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 de sistema estiverem bloqueados.

Se o logon BUILTIN\Administrators estiver presente, os administradores poderão se conectar iniciando seu aplicativo usando a opção Executar como administrador.

Permissões

Requer a permissão CONTROL SERVER .

Exemplos

R. Migrando um único usuário

O exemplo a seguir migra um logon do SQL Server chamado Barry, para um usuário de banco de dados contido 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 ;  

Confira também

Migrar para um banco de dados parcialmente independente
Bancos de dados independentes