Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#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: 1534

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 smile

Cordialement,
Léandre

Hors ligne

 

Pied de page des forums

Powered by FluxBB