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