sync
This commit is contained in:
181
HCI - drop logins and users.sql
Normal file
181
HCI - drop logins and users.sql
Normal file
@@ -0,0 +1,181 @@
|
||||
/*
|
||||
cleaning up identified logins ofthe sql server instances
|
||||
|
||||
18.08.2025, TSC
|
||||
*/
|
||||
DECLARE @DebugOnly BIT = 0; --switch to 0 to actually drop the login and user(s); 1 displays the generated script.
|
||||
DECLARE @cmd NVARCHAR(MAX);
|
||||
DECLARE @DatabasePrincipalName sysname;
|
||||
|
||||
DECLARE @to_clean TABLE(
|
||||
id INT IDENTITY NOT NULL PRIMARY KEY
|
||||
,name VARCHAR(255) NOT NULL
|
||||
);
|
||||
|
||||
ALTER LOGIN sa ENABLE
|
||||
|
||||
INSERT INTO @to_clean ([name])
|
||||
SELECT [x].[name]
|
||||
FROM (
|
||||
VALUES
|
||||
--dev
|
||||
('CENTRALINFRA\ua170710') --Cosarca Ciprian-Andrei (Galenica - ADM)
|
||||
,('CENTRALINFRA\ucibecrauc_adm') --nothing found
|
||||
,('CENTRALINFRA\ucibestutt_adm') --nothing found
|
||||
,('CENTRALINFRA\up273720') --Suter Stefan (HCI - External)
|
||||
,('CENTRALINFRA\up273730') --Schefer Kilian (HCI - External)
|
||||
,('E-MEDIAT\uafka') --nothing found
|
||||
,('E-MEDIAT\uapvi') --nothing found (Pascal Vigier ?)
|
||||
,('E-MEDIAT\uatst') --nothing found
|
||||
,('E-MEDIAT\uhcbebeyem') --nothing found
|
||||
,('HCISOLUTIONS\svc-sql_content') --old sql server service account
|
||||
--int
|
||||
,('CENTRALINFRA\uacrc') --Crausaz Christophe (HCI)
|
||||
,('CENTRALINFRA\ucibestutt_adm') --nothing found
|
||||
,('CENTRALINFRA\up218930') --Sánchez González Ainel (Galenica)
|
||||
,('CENTRALINFRA\up271210') --Vijayasingam Vithursiya 2 (Galenica - External)
|
||||
,('CENTRALINFRA\up273720') --Suter Stefan (HCI - External)
|
||||
,('CENTRALINFRA\up273730') --Schefer Kilian (HCI - External)
|
||||
,('E-MEDIAT\uaano') --Notter Andreas (HCI)
|
||||
,('E-MEDIAT\uapvi') --nothing found (Pascal Vigier ?)
|
||||
,('E-MEDIAT\uauhe') --Hebel Ursula (HCI)
|
||||
,('E-MEDIAT\UHCBELOPEJ') --nothing found
|
||||
--prod
|
||||
,('CENTRALINFRA\ua170710') --Cosarca Ciprian-Andrei (Galenica - ADM)
|
||||
,('CENTRALINFRA\uacrc') --Crausaz Christophe (HCI)
|
||||
,('CENTRALINFRA\up271210') --Vijayasingam Vithursiya 2 (Galenica - External)
|
||||
,('SYMMETRIC') --symmetricDS login from BAG migration
|
||||
,('E-MEDIAT\uamro') --Rosenthal Martin (Galenica)
|
||||
,('E-MEDIAT\uapvi') --nothing found
|
||||
--log
|
||||
,('CENTRALINFRA\up271210') --Vijayasingam Vithursiya 2 (Galenica - External)
|
||||
,('E-MEDIAT\uapeh') --Ehrhardt Paul (Galenica - External)
|
||||
,('E-MEDIAT\uasne') --Sali Neslihan (HCI)
|
||||
)x(name)
|
||||
|
||||
BEGIN TRANSACTION
|
||||
SET XACT_ABORT ON;
|
||||
SET NOCOUNT ON;
|
||||
|
||||
/* declare variables */
|
||||
DECLARE [csr_user] CURSOR FAST_FORWARD READ_ONLY FOR
|
||||
SELECT name
|
||||
FROM @to_clean;
|
||||
|
||||
IF OBJECT_ID('tempdb..#dbs')IS NOT NULL BEGIN;
|
||||
DROP TABLE #dbs;
|
||||
END;
|
||||
|
||||
SELECT name, [d].[user_access], [d].[user_access_desc], [d].[is_read_only], [d].[state], state_desc, [d].[source_database_id]
|
||||
INTO #dbs
|
||||
FROM sys.databases d
|
||||
|
||||
OPEN [csr_user]
|
||||
|
||||
FETCH NEXT FROM [csr_user] INTO @DatabasePrincipalName
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
--#region drop user
|
||||
SET @cmd = '
|
||||
use ?
|
||||
if exists(
|
||||
--the user is found in the db
|
||||
select 1
|
||||
from sys.[database_principals]
|
||||
WHERE type IN (''S'',''U'')
|
||||
and name = '''+@DatabasePrincipalName+'''
|
||||
)
|
||||
and exists(
|
||||
--the db is not read only
|
||||
select 1
|
||||
from #dbs d
|
||||
where d.name=''?''
|
||||
and [is_read_only] = 0
|
||||
and [user_access] = 0 --multi_user
|
||||
and [state] = 0 --online
|
||||
and [source_database_id] is null --not a snapshot
|
||||
)
|
||||
begin
|
||||
print ''Dropping user ' + QUOTENAME(@DatabasePrincipalName) +' IN db: >?<'';
|
||||
declare @c nvarchar(max)='''';
|
||||
|
||||
select @c=@c+''ALTER AUTHORIZATION ON SCHEMA::[''+s.name+''] TO dbo;
|
||||
''
|
||||
from sys.schemas s
|
||||
WHERE principal_id = USER_ID('''+@DatabasePrincipalName+''');
|
||||
|
||||
if nullif(@c,'''') is not null
|
||||
begin
|
||||
print ''Assigning ownership of schema to DBO rather than ' + QUOTENAME(@DatabasePrincipalName) + N' '';
|
||||
print @c
|
||||
exec(@c);
|
||||
end
|
||||
|
||||
DROP USER ' + QUOTENAME(@DatabasePrincipalName) + N';
|
||||
end
|
||||
|
||||
'
|
||||
|
||||
IF @DebugOnly = 1
|
||||
BEGIN
|
||||
RAISERROR(@cmd, 0, 1);
|
||||
END;
|
||||
ELSE
|
||||
BEGIN
|
||||
EXEC sys.[sp_MSforeachdb] @cmd;
|
||||
END
|
||||
--#endregion drop user
|
||||
FETCH NEXT FROM [csr_user] INTO @DatabasePrincipalName
|
||||
END
|
||||
CLOSE [csr_user]
|
||||
DEALLOCATE [csr_user]
|
||||
|
||||
DECLARE [csr_login] CURSOR FAST_FORWARD READ_ONLY FOR
|
||||
SELECT name
|
||||
FROM @to_clean;
|
||||
|
||||
OPEN [csr_login]
|
||||
|
||||
FETCH NEXT FROM csr_login INTO @DatabasePrincipalName
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
--#region Drop login
|
||||
SET @cmd ='
|
||||
use ?
|
||||
if exists(
|
||||
select 1
|
||||
from sys.[server_principals]
|
||||
WHERE type IN (''S'',''U'')
|
||||
and name = '''+@DatabasePrincipalName+'''
|
||||
)
|
||||
begin
|
||||
print ''Dropping login ' + QUOTENAME(@DatabasePrincipalName) +''';
|
||||
DROP LOGIN ' + QUOTENAME(@DatabasePrincipalName) + N';
|
||||
end
|
||||
|
||||
'
|
||||
|
||||
IF @DebugOnly = 1
|
||||
BEGIN
|
||||
RAISERROR(@cmd, 0, 1);
|
||||
END;
|
||||
ELSE
|
||||
BEGIN
|
||||
EXEC sys.[sp_MSforeachdb] @cmd;
|
||||
END
|
||||
--#endregion Drop login
|
||||
|
||||
|
||||
FETCH NEXT FROM [csr_login] INTO @DatabasePrincipalName
|
||||
END
|
||||
|
||||
CLOSE [csr_login]
|
||||
DEALLOCATE [csr_login]
|
||||
|
||||
|
||||
ALTER LOGIN sa DISABLE
|
||||
|
||||
ROLLBACK TRANSACTION
|
||||
--COMMIT TRANSACTION
|
||||
|
||||
Reference in New Issue
Block a user