sp_migrate_user_to_contained (Transact-SQL)

Si applica a:SQL Server

Converte un utente di 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 usare questa procedura per rimuovere le dipendenze dall'istanza di SQL Server in cui è installato il database. sp_migrate_user_to_contained separa l'utente dall'account di accesso di SQL Server originale, in modo che le impostazioni come password e lingua predefinita possano essere gestite separatamente per il database indipendente. sp_migrate_user_to_contained possibile usare prima di spostare il database indipendente in un'istanza diversa del motore di database di SQL Server per eliminare le dipendenze dagli account di accesso correnti dell'istanza di SQL Server.

Nota

Prestare attenzione quando si usa sp_migrate_user_to_contained, in quanto non sarà possibile invertire l'effetto. Questa procedura viene utilizzata solo in un database indipendente. Per altre 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 mappato a un account di accesso autenticato di SQL Server. Il valore è sysname, con valore predefinito NULL.

[@rename = ] N'copy_login_name'N'keep_name | '
Quando un utente del database basato su un account di accesso ha un nome utente diverso da quello dell'account di accesso, usare keep_name per conservare il nome utente del database durante la migrazione. Usare copy_login_name per creare il nuovo utente del database indipendente con il nome dell'account di accesso anziché l'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 come catalogo iniziale come parte del stringa di connessione.

Valori del codice restituito

0 (operazione completata) o 1 (operazione non riuscita)

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 se l'utente ha negato l'autorizzazione CONNECT al database.

sp_migrate_user_to_contained sono previste le restrizioni seguenti.

  • Il nome utente non può essere già esistente nel database.

  • Impossibile convertire gli utenti predefiniti, ad esempio dbo e guest.

  • L'utente non può essere specificato nella clausola EXECUTE AS di una stored procedure firmata.

  • L'utente non può possedere una stored procedure che include la clausola EXECUTE AS OWNER .

  • sp_migrate_user_to_contained non può essere utilizzato in un database di sistema.

Sicurezza

Quando si esegue la migrazione degli utenti, prestare attenzione a non disabilitare o eliminare tutti gli account di accesso amministratore dall'istanza di SQL Server. Se tutti gli account di accesso vengono eliminati, vedere Connessione a SQL Server quando i Amministrazione istratori di sistema sono bloccati.

Se è presente l'account di accesso BUILTIN\Amministrazione istrators, gli amministratori possono connettersi avviando l'applicazione usando l'opzione Esegui come Amministrazione istrator.

Autorizzazioni

È richiesta l'autorizzazione CONTROL SERVER .

Esempi

R. Migrazione di un solo utente

Nell'esempio seguente viene eseguita la migrazione di un account di accesso di SQL Server denominato Barry, a un utente del database indipendente con password. L'esempio non modifica il nome utente e mantiene l'account di accesso come 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 agli utenti di database indipendenti 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 ;  

Vedi anche

Eseguire la migrazione in un database parzialmente indipendente
Database indipendenti