Files
sql-scripts/DELPHIX - give permission on db's to people in the project.sql
Schork Thierry (Galenica - ADM) 63d058a7eb added files from swmgmt03
2025-09-22 09:00:00 +02:00

96 lines
2.2 KiB
Transact-SQL

/*
Server: samnb705db01.amavita.ch
Format: GCM
Business: TPPHAR
type: VALI
Version: 23.1.21006.00066
28.02.2024, TSC
*/
USE master;
DECLARE @q NVARCHAR(MAX) = N'';
DECLARE @tplLogin NVARCHAR(MAX)
= N'
IF EXISTS (SELECT 1 FROM master.dbo.syslogins WHERE name = ''@login@'')
BEGIN
ALTER LOGIN [@login@]
WITH DEFAULT_DATABASE = [master],
DEFAULT_LANGUAGE = [us_english]
--CHECK_EXPIRATION = OFF,
--CHECK_POLICY = ON;
ALTER LOGIN [@login@] ENABLE;
END;
ELSE
BEGIN
CREATE LOGIN [@login@] FROM WINDOWS
WITH DEFAULT_DATABASE = [master],
DEFAULT_LANGUAGE = [us_english]
--CHECK_EXPIRATION = OFF,
--CHECK_POLICY = ON;
END;
';
DECLARE @tplRight NVARCHAR(MAX) = N'
USE @dbName@
IF NOT EXISTS(
SELECT *
FROM sys.database_principals AS dp
INNER JOIN sys.server_principals AS sp ON dp.sid = sp.sid
WHERE sp.type_desc IN (''WINDOWS_LOGIN'', ''SQL_LOGIN'')
AND sp.name = ''@login@''
)
BEGIN
CREATE USER [@login@] FOR LOGIN [@login@]
END
ALTER ROLE [db_owner] ADD MEMBER [@login@]
';
DECLARE @users TABLE (login VARCHAR(255) NOT NULL,
name VARCHAR(255) NOT NULL);
INSERT INTO @users ([login],
[name])
VALUES ('CENTRALINFRA\ua253440', 'Oliver'),
('CENTRALINFRA\ua253450', 'Franck'),
('CENTRALINFRA\ua193890','Muhamed'),
('CENTRALINFRA\ua210510', 'Wyn');
--#region create logins
SELECT @q = @q + REPLACE(@tplLogin, '@login@', [u].[login])
FROM @users u;
--#endregion create logins
--#region give rights to db's
/* declare variables */
DECLARE @dbName NVARCHAR(255),
@login VARCHAR(255);
DECLARE csrDb CURSOR FAST_FORWARD READ_ONLY FOR
SELECT [d].[name],
[u].[login]
FROM sys.databases d
CROSS JOIN @users u
WHERE LOWER([d].[name]) IN ( 'arizona', 'arizonarep', 'hcitools', 'arizonacust', 'activepos_read', 'activepos_write' );
OPEN csrDb;
FETCH NEXT FROM csrDb
INTO @dbName,
@login;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @q = @q + REPLACE(REPLACE(@tplRight, '@dbName@', @dbName), '@login@', @login);
FETCH NEXT FROM csrDb
INTO @dbName,
@login;
END;
CLOSE csrDb;
DEALLOCATE csrDb;
--#endregion give rights to db's
--PRINT @q;
EXEC (@q);