Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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. Utilizzare invece ALTER USER.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
sys.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
I campioni di codice in questo articolo utilizzano il AdventureWorks2025 database di esempi di ORAdventureWorksDW2025, che puoi scaricare dal repository GitHub Azure Data SQL Samples Repository.
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).
EXECUTE 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. Sostituire <password> con una password complessa.
--Create the new login.
CREATE LOGIN MaryB WITH PASSWORD = '<password>';
GO
--Map database user MB-Sales to login MaryB.
USE AdventureWorks2022;
GO
EXECUTE 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 con una password se l'account di accesso Mary non esiste. Sostituire <password> con una password complessa.
USE AdventureWorks2022;
GO
EXECUTE sp_change_users_login 'Auto_Fix', 'Mary', NULL, '<password>';
GO