#1 Tue 25 May 2021 14:47
- tweaxy
- Participant actif
- Lieu: Abbeville
- Date d'inscription: 27 Dec 2018
- Messages: 76
Restructuration des droits PostgreSQL : Function REVOKE
Bonjour,
Dans le cadre d'une restructuration de la gestion des rôles sous PostgreSQL, nous allons procéder comme suit :
-- Suppression de tous les droits sur toutes les tables (dont vues et vues matérialisées)
-- Création de groupes de rôles
-- Attribution des droits SELECT / CREATE / UPDATE / DELETE sur les tables en fonction des groupes de rôles préalablement mis en place
-- Attribution des rôles dans les groupes de rôles correspondants.
Dans la première étape, je souhaite donc REVOKER tous les users possibles sur toutes les tables en base.
J'ai donc préparé, en m'appuyant d'une function de TRUNCATE de toutes les tables en base, ce script :
CREATE OR REPLACE FUNCTION revoke_roles(username IN VARCHAR) RETURNS void AS $$
DECLARE
statements CURSOR FOR
SELECT schemaname, tablename FROM pg_tables
WHERE /*tableowner = username AND*/ schemaname NOT IN ('pg_catalog','information_schema')
--ORDER BY schemaname, tablename
UNION
select schemaname, viewname as tablename from pg_catalog.pg_views
where schemaname NOT IN ('pg_catalog', 'information_schema')
order by schemaname, tablename;
-- MANQUE LES VUES MATERIALISEES ICI
BEGIN
FOR stmt IN statements LOOP
EXECUTE 'REVOKE ALL PRIVILEGES ON' || quote_ident(stmt.schemaname) || quote_ident(stmt.tablename) || ' FROM "USERNAME" CASCADE;';
END LOOP;
END;
$$ LANGUAGE plpgsql;
Cela devrait fonctionner (non testé car la suite du script n'est pas encore mise en place).
En revanche, je n'arrive pas à lister les VM de façon à avoir le nom du schéma + le nom de la VM.
En utilisant cette requête, je sors le nom de la VM mais pas le schéma :
SELECT *
FROM pg_class
WHERE relkind = 'm';
Est-il possible de sortir un nom de schema + nom de la vm à la fois ?
Bien Cordialement,
Léandre
Dernière modification par tweaxy (Tue 25 May 2021 15:29)
Hors ligne
#2 Tue 25 May 2021 17:33
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1538
Re: Restructuration des droits PostgreSQL : Function REVOKE
Bonjour,
Il faut lier pg_class et pg_namespace (table stockant les schémas):
Code:
select c.oid, c.relname, c.relkind, pn.nspname from pg_catalog.pg_class c join pg_namespace pn on c.relnamespace = pn.oid where c.relkind = 'm';
Nicolas
Hors ligne
#3 Wed 26 May 2021 10:29
- tweaxy
- Participant actif
- Lieu: Abbeville
- Date d'inscription: 27 Dec 2018
- Messages: 76
Re: Restructuration des droits PostgreSQL : Function REVOKE
Bonjour Nicolas,
Merci beaucoup
Cordialement,
Léandre
Hors ligne