Compartilhar via


sp_migrate_user_to_contained (Transact-SQL)

Aplica-se: 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 independente com senha. Em um banco de dados independente, 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 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 nos logons atuais da instância do SQL Server.

Cuidado

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

Nome de um usuário no banco de dados independente atual 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 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'

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

Valores do código de retorno

0 (sucesso) ou 1 (falha).

Comentários

sp_migrate_user_to_contained Cria o usuário do banco de dados independente 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 negada a CONNECT permissão 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.
  • Usuários internos, por exemplo , dbo e guest, não podem ser convertidos.
  • O usuário não pode ser especificado na EXECUTE AS cláusula de um procedimento armazenado assinado.
  • O usuário não pode possuir um procedimento armazenado que inclua a EXECUTE AS OWNER cláusula.
  • 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 do sistema estiverem bloqueados.

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

Permissões

Requer a permissão CONTROL SERVER.

Exemplos

R. 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 independente com senha. O exemplo não altera o nome de usuário e mantém o logon como habilitado.

EXEC 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 logons para usuários de banco de dados independente 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 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
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;