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. 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 in questo articolo usano il database di esempio AdventureWorks2025 o AdventureWorksDW2025, che è possibile scaricare dalla home page Microsoft SQL Server Samples and Community Projects.
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