Condividi tramite


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_containedpuò essere usato 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.

Attenzione

Prestare attenzione quando si usa sp_migrate_user_to_contained, perché 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'username'

Nome di un utente nel database indipendente corrente mappato a un account di accesso autenticato di SQL Server. Il valore è sysname, con un 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 rispetto al nome 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'

Utilizzato per disabilitare l'account di accesso nel master database. Per connettersi quando l'account di accesso è disabilitato, la connessione deve fornire il nome del database indipendente come initial catalog parte del stringa di connessione.

Valori del codice restituito

0 (esito positivo) o 1 (errore).

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 presenta le restrizioni seguenti.

  • Il nome utente non può esistere già nel database.
  • Gli utenti predefiniti, ad esempio dbo e guest, non possono essere convertiti.
  • L'utente non può essere specificato nella EXECUTE AS clausola di una stored procedure firmata.
  • L'utente non può possedere una stored procedure che include la EXECUTE AS OWNER clausola .
  • sp_migrate_user_to_contained non può essere usato 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 Connettersi a SQL Server quando gli amministratori di sistema sono bloccati.

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

Autorizzazioni

È necessaria l'autorizzazione CONTROL SERVER.

Esempi

R. Eseguire la migrazione di un singolo 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.

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

B. Eseguire la migrazione di tutti gli utenti del database con account di accesso a utenti di database indipendenti 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. L'esempio esclude gli 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
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;