إزالة مستخدم دون ترك بيانات معزولة في SQL Server
قم بإزالة المستخدمين تمامًا من SQL Server دون ترك البيانات المعزولة
سياق الكلام
يمكن أن يؤدي إسقاط مستخدم من قسم تسجيلات الدخول إلى إنشاء مستخدمين معزولين في قواعد البيانات ، لذلك يُنصح بإزالة الوصول إلى قاعدة البيانات قبل حذف المستخدم ثم حذفه.
قد يستغرق هذا وقتًا طويلاً جدًا ، لذلك مسلحًا بالمعلومات المختلفة التي وجدتها قد توصلنا إلى الكود أدناه.
لقد وفر لي الوقت عند إزالة المستخدمين ، لذلك آمل أن يساعدك.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