Partilhar via


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 onde 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.

Atenção

Tenha cuidado ao usar sp_migrate_user_to_contained, pois você não será capaz de reverter o efeito. Este procedimento é usado apenas em um banco de dados contido. 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

Importante

Os argumentos para procedimentos armazenados estendidos devem ser inseridos na ordem específica, conforme descrito na seção de sintaxe. Se os parâmetros forem inseridos fora de ordem, ocorrerá uma mensagem de erro.

[ @username = ] N'nome de utilizador'

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 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 contido com o nome do login, em vez do usuário. Quando um usuário de banco de dados baseado em um logon tem o mesmo nome de usuário que o nome de logon, ambas as opções criam o usuário de banco de dados contido sem alterar o nome.

[ @disablelogin = ] N'disable_login' | N'do_not_disable_login'

Usado para desativar o login no banco de dados master. Para se conectar quando o logon estiver desabilitado, a conexão deve fornecer o nome do banco de dados contido como o initial catalog como parte da cadeia de conexão.

Valores de código de retorno

0 (sucesso) ou 1 (fracasso).

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 login. Por exemplo, o procedimento pode ser bem-sucedido se o login estiver desabilitado ou se for negada ao usuário a permissão de CONNECT para o banco de dados.

sp_migrate_user_to_contained tem as seguintes restrições.

  • O nome de usuário ainda não pode existir no banco de dados.
  • Os usuários internos, por exemplo, dbo e convidado , 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.
  • 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 login BUILTIN\Administrators estiver presente, os administradores poderão se conectar iniciando seu aplicativo usando a opção Executar como de administrador.

Permissões

Requer a permissão de CONTROL SERVER.

Exemplos

Um. Migrar 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 login como habilitado.

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

B. Migrar todos os usuários do banco de dados com logins para usuários de banco de dados contidos sem logons

O exemplo a seguir migra todos os usuários baseados em logons do SQL Server para usuários de banco de dados contidos com senhas. O exemplo exclui logons que não estão habilitados. O exemplo deve ser executado no banco de dados contido.

DECLARE @username AS 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;