138 lines
4.1 KiB
Transact-SQL
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 |