Condividi tramite


sp_change_users_login (Transact-SQL)

Si applica a:SQL Server

Esegue il mapping di un utente di database esistente a un account di accesso di SQL Server.

Importante

Questa funzionalità verrà rimossa nelle versioni future di SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. In alternativa, usare ALTER USER .

Convenzioni relative alla sintassi Transact-SQL

Sintassi

sp_change_users_login
    [ @Action = ] 'Action'
    [ , [ @UserNamePattern = ] N'UserNamePattern' ]
    [ , [ @LoginName = ] N'LoginName' ]
    [ , [ @Password = ] N'Password' ]
[ ; ]

Argomenti

[ @Action = ] 'Azione'

Descrive l'azione da eseguire per la stored procedure. @Action è varchar(10), senza impostazione predefinita e può avere uno dei valori seguenti.

valore Descrizione
Auto_Fix Collega una voce utente nella vista del sys.database_principals catalogo di sistema nel database corrente a un account di accesso di SQL Server con lo stesso nome. Se non esiste un account di accesso con lo stesso nome, ne viene creato uno. Esaminare il risultato dell'istruzione Auto_Fix per verificare che il collegamento corretto sia effettivamente stato eseguito. Evitare di usare Auto_Fix in situazioni sensibili alla sicurezza.

Quando si usa Auto_Fix, è necessario specificare @UserNamePattern e @Password se l'account di accesso non esiste già, altrimenti è necessario specificare @UserNamePattern ma @Password viene ignorato. @LoginName deve essere NULL. @UserNamePattern deve essere un utente valido nel database corrente. L'account di accesso non può essere mappato a un altro utente.
Report Elenca gli utenti e gli identificatori di sicurezza (SID) corrispondenti nel database corrente che non sono collegati ad alcun account di accesso. @UserNamePattern, @LoginName e @Password devono essere NULL o meno specificati.

Per sostituire l'opzione del report con una query usando le tabelle di sistema, confrontare le voci in sys.server_principals con le voci in sys.database_principals.
Update_One Collega il @UserNamePattern specificato nel database corrente a un @LoginName di SQL Server esistente. è necessario specificare @UserNamePattern e @LoginName. @Password deve essere NULL o meno specificato.

[ @UserNamePattern = ] N'UserNamePattern'

Nome di un utente nel database corrente. @UserNamePattern è sysname, con il valore predefinito NULL.

[ @LoginName = ] N'LoginName'

Nome di un account di accesso di SQL Server. @LoginName è sysname, con il valore predefinito NULL.

[ @Password = ] N'Password'

Password assegnata a un nuovo account di accesso di SQL Server creato specificando Auto_Fix. @Password è sysname e non può essere NULL. Se esiste già un account di accesso corrispondente, l'utente e l'account di accesso vengono mappati e @Password viene ignorato. Se non esiste un account di accesso corrispondente, sp_change_users_login crea un nuovo account di accesso di SQL Server e assegna @Password come password per il nuovo account di accesso.

Importante

Usare sempre una password complessa.

Valori del codice restituito

0 (esito positivo) o 1 (errore).

Set di risultati

Nome colonna Tipo di dati Descrizione
UserName sysname Nome dell'utente del database.
UserSID varbinary(85) ID di sicurezza (SID) dell'utente.

Osservazioni:

Usare sp_change_users_login per collegare un utente del database nel database corrente con un account di accesso di SQL Server. Se l'account di accesso per un utente cambia, usare sp_change_users_login per collegare l'utente al nuovo account di accesso senza perdere le autorizzazioni utente. Il nuovo @LoginName non può essere sae il @UserNamePattern non può essere dbo, guesto un INFORMATION_SCHEMA utente.

sp_change_users_login non può essere usato per eseguire il mapping degli utenti del database a entità di sicurezza, certificati o chiavi asimmetriche a livello di Windows.

sp_change_users_login non può essere usato con un account di accesso di SQL Server creato da un'entità di Windows o con un utente creato tramite CREATE USER WITHOUT LOGIN.

sp_change_users_login non può essere eseguito all'interno di una transazione definita dall'utente.

Autorizzazioni

Richiede l'adesione al ruolo predefinito del database db_owner. Solo i membri del ruolo predefinito del server sysadmin possono specificare l'opzione Auto_Fix .

Esempi

Gli esempi di codice Transact-SQL in questo articolo utilizzano il database campione AdventureWorks2022 o AdventureWorksDW2022, che è possibile scaricare dalla home page di Esempi di Microsoft SQL Server e progetti collettivi.

R. Visualizzare un report dell'utente corrente per i mapping di accesso

Nell'esempio seguente viene creato un report che include gli utenti del database corrente e i relativi ID di sicurezza (SID).

EXEC sp_change_users_login 'Report';

B. Eseguire il mapping di un utente del database a un nuovo account di accesso di SQL Server

Nell'esempio seguente un utente del database è associato a un nuovo account di accesso di SQL Server. L'utente del database MB-Sales, sul quale inizialmente viene eseguito il mapping a un account di accesso diverso, viene eseguito il mapping all'account di accesso MaryB.

--Create the new login.
CREATE LOGIN MaryB WITH PASSWORD = '982734snfdHHkjj3';
GO
--Map database user MB-Sales to login MaryB.
USE AdventureWorks2022;
GO
EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';
GO

C. Eseguire automaticamente il mapping di un utente a un account di accesso e creare un nuovo account di accesso, se necessario

Nell'esempio seguente viene illustrato come usare Auto_Fix per eseguire il mapping di un utente esistente a un account di accesso con lo stesso nome o per creare l'account di accesso Mary di SQL Server che rappresenta la password B3r12-3x$098f6 se l'account di accesso Mary non esiste.

USE AdventureWorks2022;
GO
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-3x$098f6';
GO