83 lines
2.1 KiB
Transact-SQL
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
|