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_prinicpals 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 sa
e il @UserNamePattern non può essere dbo
, guest
o 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