sp_migrate_user_to_contained (Transact-SQL)
Converte un utente del database di cui è stato eseguito il mapping a un account di accesso di SQL Server in un utente del database indipendente con password. In un database indipendente, utilizzare questa procedura per rimuovere le dipendenze nell'istanza di SQL Server in cui viene installato il database. sp_migrate_user_to_contained separa l'utente dall'account di accesso originale di SQL Server, in modo che sia possibile amministrare separatamente impostazioni quali password e lingua predefinita per il database indipendente. È possibile utilizzare sp_migrate_user_to_contained prima di spostare il database indipendente in un'istanza diversa di Motore di database di SQL Server per eliminare le dipendenze negli account di accesso correnti dell'istanza di SQL Server.
Nota Questa procedura viene utilizzata solo in un database indipendente. Per ulteriori informazioni, vedere Database indipendenti.
Sintassi
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' }
Argomenti
[@username = ] N'user'
Nome di un utente nel database indipendente corrente di cui è stato eseguito il mapping a un account di accesso con autenticazione di SQL Server. Il valore è sysname e il valore predefinito è NULL.[@rename = ] N'copy_login_name' | N'keep_name'
Quando un utente del database basato su un account di accesso dispone di un nome utente diverso rispetto al nome dell'account di accesso, utilizzare keep_name per mantenere il nome dell'utente del database durante la migrazione. Utilizzare copy_login_name per creare il nuovo utente del database indipendente con il nome dell'account di accesso, anziché dell'utente. Quando il nome utente di un utente del database basato su un account di accesso è uguale al nome dell'account di accesso, entrambe le opzioni consentono di creare l'utente del database indipendente senza la modifica del nome.[@disablelogin = ] N'disable_login' | N'do_not_disable_login'
disable_login disabilita l'account di accesso nel database master. Per connettersi quando l'account di accesso è disabilitato, la connessione deve fornire il nome del database indipendente initial catalog, come parte della stringa di connessione.
Valori restituiti
0 (esito positivo) o 1 (esito negativo)
Osservazioni
sp_migrate_user_to_contained crea l'utente del database indipendente con password, indipendentemente dalle proprietà o dalle autorizzazioni dell'account di accesso. Ad esempio, la procedura può avere esito positivo se l'account di accesso è disabilitato o all'utente viene negata l'autorizzazione CONNECT per il database.
sp_migrate_user_to_contained prevede le restrizioni seguenti.
Il nome utente non può essere già esistente nel database.
Impossibile convertire gli utenti predefiniti, ad esempio dbo e guest.
Impossibile specificare l'utente nella clausola EXECUTE AS di una stored procedure firmata.
L'utente non può possedere una stored procedure che includa la clausola EXECUTE AS OWNER.
Impossibile utilizzare sp_migrate_user_to_contained in un database di sistema.
Sicurezza
Quando si esegue la migrazione di utenti, fare attenzione a non disabilitare o eliminare tutti gli account di accesso di amministratore dall'istanza di SQL Server. Se vengono eliminati tutti gli account di accesso, vedere Connettersi a SQL Server se gli amministratori di sistema sono bloccati.
Se è presente l'account di accesso BUILTIN\Administrators, gli amministratori possono connettersi avviando l'applicazione mediante l'opzione Esegui come amministratore.
Autorizzazioni
È necessaria l'autorizzazione CONTROL SERVER.
Esempi
A.Migrazione di un solo utente
Nell'esempio seguente viene eseguita la migrazione di un account di accesso di SQL Server denominato Barry a un database indipendente con password. Nell'esempio il nome utente non viene modificato e l'account di accesso rimane abilitato.
sp_migrate_user_to_contained
@username = N'Barry',
@rename = N'keep_name',
@disablelogin = N'do_not_disable_login' ;
B.Migrazione di tutti gli utenti del database con account di accesso a utenti del database indipendente senza account di accesso
Nell'esempio seguente viene eseguita la migrazione di tutti gli utenti basati sugli account di accesso di SQL Server a utenti del database indipendente con password. Nell'esempio sono inclusi account di accesso non abilitati. L'esempio deve essere eseguito nel database indipendente.
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 ;