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;