sp_change_users_login (Transact-SQL)

Viene eseguito il mapping di un utente esistente del database a un account di accesso di SQL Server. Questa funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Utilizzare ALTER USER in alternativa.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

sp_change_users_login [ @Action = ] 'action' 
    [ , [ @UserNamePattern = ] 'user' ] 
    [ , [ @LoginName = ] 'login' ] 
    [ , [ @Password = ] 'password' ]
[;]

Argomenti

  • [ @Action= ] 'action'
    Descrive l'azione che deve essere eseguita dalla procedura. action è di tipo varchar(10). action può disporre di uno dei valori seguenti.

    Valore

    Descrizione

    Auto_Fix

    Collega una voce utente presente nella vista del catalogo di sistema sys.database_principals del 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 verrà creato uno. Esaminare il risultato dell'istruzione Auto_Fix per confermare che è stato stabilito il collegamento corretto. Evitare l'utilizzo di Auto_Fix in situazioni problematiche in relazione alla sicurezza.

    In caso di utilizzo di Auto_Fix, è necessario specificare user e password se l'account di accesso non esiste. In caso contrario, è necessario specificare user mentre password verrà ignorato. login deve essere NULL. user deve essere un utente valido nel database corrente. Non è possibile eseguire il mapping dell'account di accesso a un altro utente.

    Report

    Elenca gli utenti e gli ID di sicurezza (SID) corrispondenti disponibili nel database corrente e non collegati ad alcun account di accesso. user, login e password devono essere NULL oppure devono essere omessi.

    Per sostituire l'opzione di report con una query utilizzando le tabelle di sistema, confrontare le voci in sys.server_prinicpals con le voci in sys.database_principals.

    Update_One

    Collega l'oggetto user specificato nel database corrente a un oggetto login di SQL Server esistente. user e login devono essere specificati. password deve essere NULL o non specificato.

  • [ @UserNamePattern= ] 'user'
    Nome di un utente nel database corrente. user è di tipo sysname e il valore predefinito è NULL.

  • [ @LoginName= ] 'login'
    Nome di un account di accesso di SQL Server. login è di tipo sysname e il valore predefinito è NULL.

  • [ @Password= ] 'password'
    Password assegnata a un nuovo account di accesso di SQL Server creato tramite Auto_Fix. Se un account di accesso corrispondente esiste già, viene eseguito il mapping di utente e account di accesso e l'opzione password viene ignorata. Se un account di accesso corrispondente non esiste, sp_change_users_login crea un nuovo account di accesso di SQL Server e assegna password come password del nuovo account di accesso. password è di tipo sysname e deve essere NULL.

    Nota sulla sicurezzaNota sulla sicurezza

    Utilizzare una password complessa. Per ulteriori informazioni, vedere Password complesse.

Valori restituiti

0 (esito positivo) o 1 (esito negativo)

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

Utilizzare sp_change_users_login per collegare un utente di database nel database corrente a un account di accesso di SQL Server. Se l'account di accesso per un utente è stato modificato, utilizzare sp_change_users_login per collegare l'utente al nuovo account di accesso senza perdere le autorizzazioni corrispondenti. Il nuovo login non può essere sa e user* *non può essere dbo, guest o un utente INFORMATION_SCHEMA.

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

Non è possibile utilizzare sp_change_users_login con un account di accesso di SQL Server creato da un'entità di Windows o con un utente creato mediante CREATE USER WITHOUT LOGIN.

La stored procedure sp_change_users_login non può essere eseguita all'interno di una transazione definita dall'utente.

Autorizzazioni

È richiesta l'appartenenza al ruolo predefinito del database db_owner. Solo i membri del ruolo predefinito del server sysadmin possono specificare l'opzione Auto_Fix.

Esempi

A.Visualizzazione di un report dei mapping tra utente corrente e account 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.Mapping tra un utente del database e un nuovo account di accesso di SQL Server

Nell'esempio seguente un utente del database viene 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 AdventureWorks2012;
GO
EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';
GO

C.Mapping automatico tra un utente e un account di accesso e creazione di un nuovo account di accesso se necessario

Nell'esempio seguente viene illustrato come utilizzare l'opzione Auto_Fix per eseguire il mapping tra un utente esistente e un account di accesso con lo stesso nome oppure per creare l'account di accesso di SQL Server denominato Mary associato alla password B3r12-3x$098f6 se l'account di accesso Mary non esiste.

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

Vedere anche

Riferimento

Stored procedure di sicurezza (Transact-SQL)

CREATE LOGIN (Transact-SQL)

sp_adduser (Transact-SQL)

sp_helplogins (Transact-SQL)

Stored procedure di sistema (Transact-SQL)

sys.database_principals (Transact-SQL)