Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL esegue il mapping di un account di accesso a un utente esistente

Per riconciliare l'utente con il login, è possibile utilizzare la stored procedure di sistema sp_change_users_login.

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

Ad esempio:

EXEC sp_change_users_login 'Update_One','User123','User123'

Se hai molti utenti che non sono sincronizzati, puoi utilizzare un cursore per estrarre tutti gli utenti ed eseguire questo comando per loro. Non c'è alcun effetto negativo nell'esecuzione di questa operazione contro utenti che non sono sincronizzati e risolverà tutti gli utenti orfani.

DECLARE @sql NVARCHAR(MAX);
DECLARE curSQL CURSOR
FOR
       SELECT   'EXEC sp_change_users_login ''UPDATE_ONE'', ''' + name + ''', ''' + name + ''''
       FROM     sysusers
       WHERE    issqluser = 1
                AND name NOT IN ( 'guest', 'dbo', 'sys', 'INFORMATION_SCHEMA' )
OPEN curSQL
FETCH curSQL INTO @sql
WHILE @@FETCH_STATUS = 0 
     BEGIN
           EXEC (
           @sql
           )
           FETCH curSQL INTO @sql
     END
CLOSE curSQL
DEALLOCATE curSQL

Questo deve essere eseguito dal contesto del database in cui gli utenti devono essere riparati.