Files
sql-scripts/TPDT-268 - ACP in task sequence/8_Remove_OrphanedSQLUsers.sql
2024-03-07 16:52:14 +01:00

62 lines
1.2 KiB
Transact-SQL

declare @cmd varchar(8000),
@name varchar (255)
USE master
SET NOCOUNT ON
declare c_databases cursor local forward_only static for
SELECT name
FROM sys.databases
WHERE name not in ('master','msdb','tempDB','model','SSISDB')
AND [is_read_only] = 0
AND [state_desc] = 'ONLINE'
ORDER BY name
;
open c_databases
;
FETCH NEXT FROM c_databases
into @name
;
while @@fetch_status = 0
begin
SET @cmd = 'declare @name varchar(50)
declare c_users cursor local forward_only static for
SELECT dp.name
FROM '+@name+'.sys.database_principals AS dp
LEFT JOIN '+@name+'.sys.server_principals AS sp
ON dp.SID = sp.SID
WHERE sp.SID IS NULL
AND dp.type_desc = ''SQL_USER''
AND dp.principal_id > 4;
open c_users
FETCH NEXT FROM c_users
into @name
while @@fetch_status = 0
begin
EXEC (''USE ['+@name+']; DROP USER ''+@name+'''')
FETCH NEXT FROM c_users
into @name
end
close c_users
deallocate c_users
' /* #fla01 */
exec (@cmd)
FETCH NEXT FROM c_databases
into @name
;
end
;
close c_databases
;
deallocate c_databases