بدون گذاشتن داده های یتیم در 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