SQL सर्वर में अनाथ डेटा छोड़े बिना किसी उपयोगकर्ता को निकालें
अनाथ डेटा को छोड़े बिना SQL सर्वर से उपयोगकर्ताओं को पूरी तरह से हटा दें
संदर्भ
लॉगिन अनुभाग से किसी उपयोगकर्ता को छोड़ने से डेटाबेस पर अनाथ उपयोगकर्ता बन सकते हैं, इसलिए आपको उपयोगकर्ता को हटाने से पहले डेटाबेस एक्सेस को हटाने की सलाह दी जाती है।
यह काफी समय लेने वाला हो सकता है, इसलिए मुझे मिली विभिन्न सूचनाओं से लैस होकर हम नीचे दिए गए कोड के साथ आए।
इसने उपयोगकर्ताओं को हटाते समय मेरा समय बचाया है, इसलिए उम्मीद है कि यह आपकी मदद कर सकता है।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