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
può 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;