Files
sql-scripts/MDPROD-36/cleanup diverse users.sql
2025-02-13 15:02:22 +01:00

83 lines
2.1 KiB
Transact-SQL

/*
21.01.2025, TSC
*/
BEGIN TRANSACTION
SET XACT_ABORT ON;
SET NOCOUNT ON;
DECLARE @query NVARCHAR(MAX);
DECLARE @tplCheckUser NVARCHAR(MAX);
DECLARE @tplUser NVARCHAR(MAX);
DECLARE @login VARCHAR(255);
DECLARE @userExists INT = -10;
SET @login='centralinfra\L-CI-AP-SQL-D-HCI-Diverse_R'
--SET @login='centralinfra\L-CI-AP-SQL-D-HCI-Diverse_RW'
SET @tplCheckUser='
USE @db@;
SELECT @userExists = 99
FROM [sys].[database_principals] dp
WHERE [dp].[name] = ''@login@''
';
SET @tplUser='
USE @db@;
DROP USER [@login@];
';
DECLARE @csrDbName VARCHAR(255);
DECLARE csrAllDbs CURSOR FAST_FORWARD READ_ONLY FOR
SELECT [d].[name]
FROM sys.databases d
WHERE [d].[database_id] >4
AND d.[is_read_only] = 0 --ignore read only dbs
AND d.[source_database_id] IS NULL --ignore snapshot
AND d.[state] = 0 --db is online
OPEN csrAllDbs
FETCH NEXT FROM csrAllDbs INTO @csrDbName
WHILE @@FETCH_STATUS = 0
BEGIN
--Create the user in the db
SET @query = REPLACE(
REPLACE(@tplCheckUser, '@db@', @csrDbName)
,'@login@'
, @login
);
EXEC [sys].[sp_executesql]
@query
,N'@userExists INT OUTPUT'
, @userExists OUTPUT
;
-- -10 is the default (not set) value. if a user did exists, the previous dynamic sql would have assigned the value 99
IF @userExists = 99
BEGIN
--drop user
SELECT @query = REPLACE(
REPLACE(@tplUser, '@db@', @csrDbName)
,'@login@'
,@login
);
EXECUTE [sys].[sp_executesql]
@query
,N''
;
--PRINT @query;
END
PRINT CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 114)+' - dropped user "Diverse" in db '+@csrDbName;
FETCH NEXT FROM csrAllDbs INTO @csrDbName
END
CLOSE csrAllDbs
DEALLOCATE csrAllDbs
--ROLLBACK TRANSACTION
COMMIT TRANSACTION