USE [HCITools] GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dba].[Restore_principal_permission]') AND type in (N'P', N'PC')) DROP PROCEDURE [dba].[Restore_principal_permission] GO USE [HCITools] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dba].[Restore_principal_permission] @in_param_database_name varchar (255) = null, @in_param_label datetime = null, @in_debug int = null AS /*============================================================================= Explication du traitement realise par la SP ------------------------------------------- Cette Sp sert a rétablir à partir d'une sauvegarde les droits 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 : 17.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 or (@in_param_label is null) begin select @errno = 70003, @errmsg = '(APS) Invalid input parameters !' goto error_99 end if not exists (select 1 from HCITools.dba.Principal_Permission where PP_timestamp = CONVERT(datetime, @in_param_label,121)) begin select @errno = 70003, @errmsg = '(DBA) No label found to restore principal permission ! ' + @in_param_label goto error_99 end /*------------------- Declaration des variables --------------------*/ declare @cmd varchar (max); declare @label datetime, @database_name varchar (255), @database_id int; /*------------ Affectation des parametres aux variables ------------*/ select @label = CONVERT(datetime, @in_param_label,121); select @database_name = @in_param_database_name select top 1 @database_id = database_id from sys.databases where name = @database_name select @cmd = '' /*-------------------------- Traitement ---------------------------*/ begin try select @cmd = @cmd + PP_apply_permission_command + CHAR(13) from HCITools.dba.Principal_Permission where len(PP_apply_permission_command) > 3 and PP_timestamp = CONVERT(datetime, @label,121) and PP_database_name = @database_name select @cmd= 'USE ' + @database_name +';' + CHAR(13) + @cmd if (@in_Debug = 1) print @cmd; else exec (@cmd) end try begin catch select @errno = 70000, @errmsg = 'Error occured when restoring principals !! ' + ERROR_MESSAGE() ; goto error_99 end catch /*------------------ Retour au programme appelant -----------------*/ return(ISNULL(@@error,0)); /*---------------------- Traitement des erreurs ----------------------*/ error_99: raiserror(@errmsg, 14, 1) return(@errno) ; go