sql >> Databasteknik >  >> RDS >> Sqlserver

SQL mappa en inloggning till en befintlig användare

För att förena användaren med inloggningen kan du använda den systemlagrade proceduren sp_change_users_login.

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

Till exempel:

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

Om du har många användare som inte är synkroniserade kan du använda en markör för att dra ut alla användare och köra det här kommandot åt ​​dem. Det finns ingen negativ effekt av att köra detta mot användare som inte är ur synk, och det kommer att fixa alla föräldralösa användare.

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

Detta måste köras i sammanhanget för databasen du behöver fixa användarna i.



  1. SQL Server-avrundningsfel, ger olika värden

  2. MySQL-syntaxfel på DELIMITER före CREATE TRIGGER

  3. Hjälp att beräkna komplex summa i hierarkisk datauppsättning

  4. Hur hanterar man flera tidszoner i applikationer som lagrar datum och tider?