Entfernen Sie einen Benutzer, ohne verwaiste Daten in SQL Server zu belassen
Entfernen Sie Benutzer vollständig aus SQL Server, ohne verwaiste Daten zu hinterlassen
Kontext
Durch das Löschen eines Benutzers aus dem Anmeldeabschnitt können verwaiste Benutzer in den Datenbanken erstellt werden. Es wird daher empfohlen, den Datenbankzugriff zu entfernen, bevor Sie den Benutzer löschen.
Dies kann sehr zeitaufwändig sein. Mit den verschiedenen Informationen, die ich gefunden habe, haben wir uns den folgenden Code ausgedacht.
Es hat mir Zeit beim Entfernen von Benutzern gespart, also kann es Ihnen hoffentlich helfen.SQL
DECLARE @UserName SysName='dfgsfdg'--Add Domain if Windows UserSET NOCOUNT ONCREATE TABLE #UserTable(UserName sysname,GroupName sysname,LoginName sysname NULL,DefDBName sysname NULL,DefSchemaName sysname NULL,UserID smallint,SID smallint)CREATE TABLE #Databases(DATABASE_NAME sysname,DATABASE_SIZE INT, REMARKS varchar(254))INSERT INTO #Databases EXEC sp_databasesDECLARE @DBName sysnameDECLARE c1 CURSOR FOR (SELECT DATABASE_NAME FROM #Databases)open c1fetch next from c1 into @DBNameWHILE @@FETCH_STATUS= 0BEGINPRINT @DBNameEXEC ('USE'+ @DBName +' INSERT INTO #UserTable EXEC sp_helpuser') IF (SELECT COUNT(*)FROM #UserTable WHERE UserName=@UserName)>0 BEGIN PRINT'Removing '''+@UserName +''' FROM '+@DBName EXEC ('USE '+ @DBName +' EXEC sp_dropuser '''+@UserName +'''') ENDDELETE FROM #UserTable--ClearTablefetch next from c1 into @DBNameENDCLOSE C1deallocate c1PRINT 'Revoking Login'IF CHARINDEX(@UserName,'\')>1 BEGINEXEC ('EXEC sp_revokelogin '''+ @UserName +'''')--Check string for domain info, assume windows if '/' foundENDIF CHARINDEX(@UserName,'\')=0 AND EXISTS(SELECT * FROM sys.server_principals WHERE name =@UserName) BEGIN--Check if SQL LoginEXEC ('DROP LOGIN ['+ @UserName +']')ENDDROP TABLE #UserTableDROP TABLE #Databases