Files
sql-scripts/TPDT-268 - ACP in task sequence/dba_storedProcedures/Backup_principal_permission.sql
2024-03-07 16:52:14 +01:00

138 lines
4.1 KiB
Transact-SQL

USE [HCITools]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dba].[Backup_principal_permission]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dba].[Backup_principal_permission]
GO
USE [HCITools]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dba].[Backup_principal_permission]
@in_param_database_name varchar (255) = null,
@in_param_label datetime,
@in_debug int = null
AS
/*=============================================================================
Explication du traitement realise par la SP
-------------------------------------------
Cette Sp sert a créer une copie de sauvegarde des droits la base Arizona,
et sécurités pour une base donnée.
Contexte d'utilisation
----------------------
Cette Sp est utilisée lors de la mise à jour des environnements afin de ,
restaurer les droits à la fin de la mise à jour.
Parametres
----------
@in_database_name = nom de la base
@@in_label = Label de l'extraction
Creation : 15.11.16 / rtc
Dossier : #35262# + Security - Backup and restore SQL objects security
Modifications :
DD.MM.YY / xxx :
=============================================================================*/
set nocount on;
declare @result_sp int,
@errno int,
@errmsg varchar(255);
/*------------------------ Test des parametres input ------------------------*/
if (@in_param_database_name is null)
begin
select @errno = 70003,
@errmsg = '(APS) Invalid input parameter database name !'
goto error_99
end
/*------------------- Declaration des variables --------------------*/
declare @cmd varchar (8000);
declare @label varchar(255),
@database_name varchar (255),
@database_id int;
/*------------ Affectation des parametres aux variables ------------*/
select @label = CONVERT(varchar(255),@in_param_label,121);
select @database_name = @in_param_database_name,
@label = isnull (@label, CONVERT(varchar(255),GETDATE(),121))
select top 1 @database_id = database_id
from sys.databases
where name = @database_name
/*-------------------------- Traitement ---------------------------*/
begin try
select @cmd = '
INSERT INTO HCITools.dba.[Principal_Permission]
SELECT ' + '''' + @database_name + '''' + ' [PP_database_name],
QUOTENAME(OBJECT_SCHEMA_NAME(ob.object_id,'+ CONVERT(varchar(100),@database_id)+')) [PP_schema],
ob.name [PP_object],
QUOTENAME(dpr.name) PP_user_name,
dp.type PP_permission_type,
dp.permission_name PP_permission_name,
dp.state PP_permission_state,
dp.state_desc PP_state_desc,
CASE WHEN state <> ''W''
THEN state_desc
ELSE ''GRANT''
END
+ '' '' + permission_name + '' ON ''+ QUOTENAME(OBJECT_SCHEMA_NAME(ob.object_id,'
+ CONVERT(varchar(100),@database_id)+')) + ''.'' + QUOTENAME(ob.name) +
CASE WHEN sc.column_id IS NULL
THEN SPACE(0)
ELSE '' (''+ QUOTENAME(sc.name) +'')''
END
+ '' TO'' + SPACE(1) + QUOTENAME(dpr.name) COLLATE database_default +
CASE WHEN dp.state <> ''W'' THEN ''''
ELSE + '' WITH GRANT OPTION''
END [PP_apply_permission_command],
CONVERT(datetime, '+ ''''+@label +''''+',121) [PP_timestamp]
FROM ' + @database_name + '.sys.database_permissions dp
JOIN '+ @database_name +' .sys.objects ob
ON dp.major_id = ob.object_id
JOIN '+ @database_name +'.sys.database_principals dpr
ON dp.grantee_principal_id = dpr.principal_id
LEFT JOIN '+ @database_name +'.sys.columns sc
ON sc.column_id = dp.minor_id
AND dp.major_id = sc.object_id
ORDER BY 1, 2, 3, 5'
if (@in_Debug = 1)
print @cmd
else
exec (@cmd)
end try
begin catch
select @errno = 70000,
@errmsg = 'Error during backup principals !! ' + ERROR_MESSAGE()
;
goto error_99
end catch
/*------------------ Retour au programme appelant -----------------*/
return(@@error);
/*---------------------- Traitement des erreurs ----------------------*/
error_99:
raiserror(@errmsg, 14, 1)
return(@errno)
;
go