46 lines
1.6 KiB
Transact-SQL
46 lines
1.6 KiB
Transact-SQL
/*
|
|
12.03.2025, TSC
|
|
*/
|
|
BEGIN TRANSACTION
|
|
SET XACT_ABORT ON;
|
|
SET NOCOUNT ON;
|
|
|
|
DECLARE @loginName NVARCHAR(128) = 'centralinfra\L-CI-AP-SQL-PROD_MED_Team';
|
|
DECLARE @sql NVARCHAR(MAX)='';
|
|
|
|
-- Cursor to iterate through all user databases
|
|
DECLARE db_cursor CURSOR LOCAL READ_ONLY FORWARD_ONLY FOR
|
|
SELECT d.name
|
|
FROM sys.databases d
|
|
WHERE d.database_id > 4 -- Exclude system databases
|
|
AND d.[source_database_id] IS NULL --not a snapshot
|
|
AND d.[state_desc]='online'
|
|
AND [d].[is_read_only]=0
|
|
|
|
OPEN db_cursor;
|
|
FETCH NEXT FROM db_cursor INTO @sql;
|
|
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
SET @sql = 'USE [' + @sql + ']; '+CHAR(13)+CHAR(10) +
|
|
'IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = ''' + @loginName + ''') '+CHAR(13)+CHAR(10) +
|
|
'BEGIN '+CHAR(13)+CHAR(10) +
|
|
' CREATE USER [' + @loginName + '] FOR LOGIN [' + @loginName + ']; '+CHAR(13)+CHAR(10) +
|
|
'END '+CHAR(13)+CHAR(10) +
|
|
'ALTER USER [' + @loginName + '] WITH DEFAULT_SCHEMA = dbo; '+CHAR(13)+CHAR(10) +
|
|
'EXEC sp_addrolemember ''db_ddladmin'', ''' + @loginName + '''; '+CHAR(13)+CHAR(10) +
|
|
'EXEC sp_addrolemember ''db_datareader'', ''' + @loginName + '''; '+CHAR(13)+CHAR(10) +
|
|
'EXEC sp_addrolemember ''db_datawriter'', ''' + @loginName + ''';'+CHAR(13)+CHAR(10)+
|
|
'GRANT EXECUTE TO [' + @loginName + '];'+CHAR(13)+CHAR(10)+
|
|
'------------------------------------'+CHAR(13)+CHAR(10);
|
|
|
|
EXEC sp_executesql @sql;
|
|
PRINT @sql;
|
|
FETCH NEXT FROM db_cursor INTO @sql;
|
|
END
|
|
|
|
CLOSE db_cursor;
|
|
DEALLOCATE db_cursor;
|
|
|
|
--ROLLBACK TRANSACTION
|
|
COMMIT TRANSACTION |