db_ecological_db
Previous topic Chapter index Next topic

Function: ps_etendre_compte

 

 

Schema

public

 

Owner

postgres

 

Descriptions

There is no description for function ps_etendre_compte

 

Options

Option

Value

Returns

text

Language

plpgsql

Parameters

compte text

statut integer = 0

 

Definition

CREATE OR REPLACE FUNCTION public.ps_etendre_compte (
 compte text,
 statut integer = 0
)
RETURNS text AS
$span$

-- Auteur : Alain Benard
-- Date de mise à jour : 17/11/2020
-- Cette procédure sert à octroyer des droits sur la base courante à un role qui a déjà été créé avec la procédure ps_creer_compte (pour une autre base certainement). Elle définit également les droits par défaut
-- pour les objets qui seront créés par le role concerné au sein de la base courante.
--
-- paramètres :
-- compte : login de l'utilisateur à autoriser
-- statut : 0 pour une inscription dans le groupe de lecture
--  1 pour une inscription dans le groupe d'écriture

-- Mises à jour :

-- - 17/11/2020 : création de la procédure
-- Un groupe habilité à exécuter cette fonction doit être créé. (nombase_admin) et les droits associés à cette procédure doivent être positionnés tels que ci-dessous :
-- ALTER FUNCTION public.ps_creer_compte(compte text, mdp text, statut integer) OWNER TO postgres;
-- GRANT EXECUTE ON FUNCTION public.ps_creer_compte(compte text, mdp text, statut integer) TO base_admin;
-- REVOKE EXECUTE ON FUNCTION public.ps_creer_compte(compte text, mdp text, statut integer) FROM PUBLIC;


-- déclaration des variables de traitements

DECLARE
role_lecture text; -- nom du groupe bénéficiant des droits en lecture sur la base
   role_ecriture text; -- nom du groupe bénéficiant des droits en écriture sur la base
role_admin text; -- nom du groupe bénéficiant des droits d'exécution des procédures stockées d'administration sur la base
   req text;
base text; -- nom de la base de données courante sans le prefixe

BEGIN
select into base substring(current_database() from 4);
role_lecture = base || '_lecture';
role_ecriture = base || '_ecriture';
role_admin = base || '_admin';

 CASE -- Préparation de la requête à exécuter
     WHEN statut = 0 THEN
         req := $$GRANT $$ || role_lecture || $$ to $$ || compte ||  $$ ;$$;
     WHEN statut = 1 THEN
         req := $$GRANT $$ || role_ecriture || $$ to $$ || compte ||  $$ ;$$;
     else
         return
'paramètre statut doit prendre la valeur 0 pour lecture ou 1 pour écriture';
 END CASE;

 EXECUTE req;
 
 -- Inscription du groupe des gestionnaires comme membre du role cree pour permettre  appropriation et gestion des droits sur les objets que le nouveau role pourra creer.
 req := $$GRANT $$ || compte || $$ to $$ || role_admin || $$ WITH ADMIN OPTION;$$;
 EXECUTE req;
 
 -- Definition des droits par defaut sur les tables et vues
 req := $$ ALTER DEFAULT PRIVILEGES FOR ROLE $$ || compte || $$ GRANT SELECT ON TABLES TO $$ || role_lecture || $$;$$;
 EXECUTE req;
 req := $$ ALTER DEFAULT PRIVILEGES FOR ROLE $$ || compte || $$ GRANT ALL ON TABLES TO $$ || role_ecriture || $$;$$;
 EXECUTE req;
 
 RAISE NOTICE 'Extension des droits du compte - % ',req;
 return 'Extension des droits OK ' || req;

EXCEPTION
WHEN OTHERS THEN
raise notice '% % - %', sqlstate, sqlerrm,req;
RETURN 'Extension des droits en erreur ' || req || ' - ' || sqlerrm;
END;
$span$
LANGUAGE
'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
PARALLEL UNSAFE
COST 100;

This file was generated with SQL Manager for PostgreSQL (www.pgsqlmanager.com)
Previous topic Chapter index Next topic