154 lines
5.3 KiB
PL/PgSQL
154 lines
5.3 KiB
PL/PgSQL
USE [master]
|
|
/* declare variables */
|
|
DECLARE @db VARCHAR(100)
|
|
IF OBJECT_ID('tempdb..#txt')IS NOT NULL BEGIN;
|
|
DROP TABLE #txt;
|
|
END;
|
|
|
|
CREATE TABLE #txt(
|
|
id INT NOT NULL IDENTITY
|
|
,db VARCHAR(100) NOT NULL
|
|
,msg NVARCHAR(MAX) NULL
|
|
);
|
|
|
|
DECLARE csr_db CURSOR FAST_FORWARD READ_ONLY FOR
|
|
SELECT d.name
|
|
FROM sys.databases d
|
|
WHERE d.[database_id]>4
|
|
AND d.[is_read_only] = 0
|
|
AND d.[state]=0
|
|
|
|
OPEN csr_db
|
|
|
|
FETCH NEXT FROM csr_db INTO @db
|
|
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
EXEC('
|
|
use '+@db+';
|
|
|
|
-- Script to generate user creation and role membership
|
|
DECLARE @UserScripts NVARCHAR(MAX) = '''';
|
|
DECLARE @RoleScripts NVARCHAR(MAX) = '''';
|
|
DECLARE @login NVARCHAR(MAX) = ''medicalData-importer-int'';
|
|
--SET @login=null;
|
|
|
|
-- Generate user creation scripts
|
|
SELECT @UserScripts = @UserScripts + ''CREATE USER ['' + dp.name + ''] FOR LOGIN ['' + dp.name + ''];'' + CHAR(13) + CHAR(10)
|
|
FROM sys.database_principals dp
|
|
WHERE dp.type IN (''S'', ''U'', ''G'')
|
|
AND dp.name NOT IN (''dbo'', ''guest'', ''INFORMATION_SCHEMA'', ''sys'')
|
|
AND dp.name = COALESCE(@login, dp.[name]);
|
|
|
|
-- Generate role membership scripts
|
|
SELECT @RoleScripts = @RoleScripts + ''ALTER ROLE ['' + dr.name + ''] ADD MEMBER ['' + dp.name + ''];'' + CHAR(13) + CHAR(10)
|
|
FROM sys.database_principals dp
|
|
JOIN sys.database_role_members drm ON dp.principal_id = drm.member_principal_id
|
|
JOIN sys.database_principals dr ON drm.role_principal_id = dr.principal_id
|
|
WHERE dp.type IN (''S'', ''U'', ''G'')
|
|
AND dp.name NOT IN (''dbo'', ''guest'', ''INFORMATION_SCHEMA'', ''sys'')
|
|
AND dp.name = COALESCE(@login, dp.[name]);
|
|
|
|
-- Print user creation and role membership scripts
|
|
PRINT @UserScripts;
|
|
insert into #txt(db,msg)
|
|
select '''+@db+''',@UserScripts
|
|
where nullif(@UserScripts,'''') is not null;
|
|
|
|
PRINT @RoleScripts;
|
|
insert into #txt(db,msg)
|
|
select '''+@db+''',@RoleScripts
|
|
where nullif(@RoleScripts,'''') is not null;
|
|
|
|
-- Script to generate permissions
|
|
DECLARE @PermissionScripts NVARCHAR(MAX) = '''';
|
|
|
|
SELECT @PermissionScripts = @PermissionScripts +
|
|
CASE
|
|
WHEN p.state_desc = ''GRANT'' THEN ''GRANT ''
|
|
WHEN p.state_desc = ''DENY'' THEN ''DENY ''
|
|
WHEN p.state_desc = ''REVOKE'' THEN ''REVOKE ''
|
|
END + p.permission_name +
|
|
CASE
|
|
WHEN p.class_desc = ''OBJECT_OR_COLUMN'' THEN '' ON ['' + OBJECT_NAME(p.major_id) + '']''
|
|
WHEN p.class_desc = ''DATABASE'' THEN '' ON DATABASE::['' + DB_NAME() + '']''
|
|
WHEN p.class_desc = ''SCHEMA'' THEN '' ON SCHEMA::['' + SCHEMA_NAME(p.major_id) + '']''
|
|
WHEN p.class_desc = ''TYPE'' THEN '' ON TYPE::['' + TYPE_NAME(p.major_id) + '']''
|
|
ELSE ''''
|
|
END + '' TO ['' + dp.name + ''];'' + CHAR(13) + CHAR(10)
|
|
FROM sys.database_permissions p
|
|
JOIN sys.database_principals dp ON p.grantee_principal_id = dp.principal_id
|
|
WHERE dp.type IN (''S'', ''U'', ''G'')
|
|
AND dp.name NOT IN (''dbo'', ''guest'', ''INFORMATION_SCHEMA'', ''sys'')
|
|
AND dp.name = COALESCE(@login, dp.[name]);
|
|
|
|
-- Print permissions scripts
|
|
PRINT @PermissionScripts;
|
|
insert into #txt(db,msg)
|
|
select '''+@db+''',@PermissionScripts
|
|
where nullif(@PermissionScripts,'''') is not null;
|
|
');
|
|
|
|
FETCH NEXT FROM csr_db INTO @db
|
|
END
|
|
|
|
CLOSE csr_db
|
|
DEALLOCATE csr_db
|
|
|
|
SELECT *
|
|
FROM [#txt]
|
|
|
|
RETURN
|
|
|
|
|
|
--USE dba
|
|
|
|
-- Script to generate user creation and role membership
|
|
DECLARE @UserScripts NVARCHAR(MAX) = '';
|
|
DECLARE @RoleScripts NVARCHAR(MAX) = '';
|
|
DECLARE @login NVARCHAR(MAX) = 'medicalData-importer-dev';
|
|
|
|
-- Generate user creation scripts
|
|
SELECT @UserScripts = @UserScripts + 'CREATE USER [' + dp.name + '] FOR LOGIN [' + dp.name + '];' + CHAR(13) + CHAR(10)
|
|
FROM sys.database_principals dp
|
|
WHERE dp.type IN ('S', 'U', 'G')
|
|
AND dp.name NOT IN ('dbo', 'guest', 'INFORMATION_SCHEMA', 'sys')
|
|
AND dp.name = COALESCE(@login, dp.[name]);
|
|
|
|
-- Generate role membership scripts
|
|
SELECT @RoleScripts = @RoleScripts + 'ALTER ROLE [' + dr.name + '] ADD MEMBER [' + dp.name + '];' + CHAR(13) + CHAR(10)
|
|
FROM sys.database_principals dp
|
|
JOIN sys.database_role_members drm ON dp.principal_id = drm.member_principal_id
|
|
JOIN sys.database_principals dr ON drm.role_principal_id = dr.principal_id
|
|
WHERE dp.type IN ('S', 'U', 'G')
|
|
AND dp.name NOT IN ('dbo', 'guest', 'INFORMATION_SCHEMA', 'sys')
|
|
AND dp.name = COALESCE(@login, dp.[name]);
|
|
|
|
-- Print user creation and role membership scripts
|
|
PRINT @UserScripts;
|
|
PRINT @RoleScripts;
|
|
|
|
-- Script to generate permissions
|
|
DECLARE @PermissionScripts NVARCHAR(MAX) = '';
|
|
|
|
SELECT @PermissionScripts = @PermissionScripts +
|
|
CASE
|
|
WHEN p.state_desc = 'GRANT' THEN 'GRANT '
|
|
WHEN p.state_desc = 'DENY' THEN 'DENY '
|
|
WHEN p.state_desc = 'REVOKE' THEN 'REVOKE '
|
|
END + p.permission_name +
|
|
CASE
|
|
WHEN p.class_desc = 'OBJECT_OR_COLUMN' THEN ' ON [' + OBJECT_NAME(p.major_id) + ']'
|
|
WHEN p.class_desc = 'DATABASE' THEN ' ON DATABASE::[' + DB_NAME() + ']'
|
|
WHEN p.class_desc = 'SCHEMA' THEN ' ON SCHEMA::[' + SCHEMA_NAME(p.major_id) + ']'
|
|
WHEN p.class_desc = 'TYPE' THEN ' ON TYPE::[' + TYPE_NAME(p.major_id) + ']'
|
|
ELSE ''
|
|
END + ' TO [' + dp.name + '];' + CHAR(13) + CHAR(10)
|
|
FROM sys.database_permissions p
|
|
JOIN sys.database_principals dp ON p.grantee_principal_id = dp.principal_id
|
|
WHERE dp.type IN ('S', 'U', 'G')
|
|
AND dp.name NOT IN ('dbo', 'guest', 'INFORMATION_SCHEMA', 'sys')
|
|
AND dp.name = COALESCE(@login, dp.[name]);
|
|
|
|
-- Print permissions scripts
|
|
PRINT @PermissionScripts; |