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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 23 September 2009 10:30

ppluvinet
Participant assidu
Lieu: VALENCE
Date d'inscription: 6 Aug 2007
Messages: 617

postgresql : table avec privilèges

Bonjour,

Je cherche à créer une table qui mettrait le nom des tables où j'ai tous les privilèges.
Je me suis intéressé à la table pg_class. or le champ  relacl  est de  type aclitem et il est impossible d'addapter des fonctions texte sur ce champ. Auriez-vous d'autres idées.

En effet, la selection suivante ne marche pas

Code:

select relname, relacl from pg_class where relacl like '%pluvinet%' ;

Merci d'avance


Pascal PLUVINET

Hors ligne

 

#2 Wed 23 September 2009 10:52

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1233
Site web

Re: postgresql : table avec privilèges

Bonjour Pascal,

en "castant" l'attribut relacl en text, la séléction fonctionne :

Code:

select relname, relacl from pg_class where relacl::text like '%pluvinet%' ;

Dernière modification par Mathieu BOSSAERT (Wed 23 September 2009 10:53)


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#3 Wed 23 September 2009 10:55

ppluvinet
Participant assidu
Lieu: VALENCE
Date d'inscription: 6 Aug 2007
Messages: 617

Re: postgresql : table avec privilèges

J'avais déjà essayé et cela ne fonctionne pas

Code:

select relname, relacl from pg_class where relacl::text like '%pluvinet%' ;
ERROR:  cannot cast type aclitem[] to text
LINE 1: ...elect relname, relacl from pg_class where relacl::text like ...

Pascal PLUVINET

Hors ligne

 

#4 Wed 23 September 2009 11:45

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1233
Site web

Re: postgresql : table avec privilèges

Je ne comprends pas,

aucun problème chez moi (select version() => PostgreSQL 8.3.5, compiled by Visual C++ build 1400)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#5 Wed 23 September 2009 12:02

ppluvinet
Participant assidu
Lieu: VALENCE
Date d'inscription: 6 Aug 2007
Messages: 617

Re: postgresql : table avec privilèges

Je suis sur 8.2 :
PostgreSQL 8.2.0 on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 3.3.5 (Debian 1:3.3.5-13)

Est-ce que c'est un problème de version?
On n'a pas l'intention de changer de version dans un avenir proche. Et je suis bien déçu que cela ne marche pas sur notre serveur!
J'ai essayé avec la fonction cast(), c'est idem.
C'est dommage car je n'avais pas envie d'abandonner !!!
Comment pourrais-je contourner cela? ....


Pascal PLUVINET

Hors ligne

 

#6 Wed 23 September 2009 12:48

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1233
Site web

Re: postgresql : table avec privilèges

Désolé Pascal, je ne suis pas à même de te répondre.

Il y a par contre des pistes ici :
http://markmail.org/message/2kzn4udf7xd … te:results

array_out(relacl) retourne un type cstring, tu dois pouvoir le "caster" en "text".

Et il semblerait bien que la possibilité de "caster" ce type en "text" soit apparu avec la version 8.3 de postgresql

Dernière modification par Mathieu BOSSAERT (Wed 23 September 2009 12:52)


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#7 Wed 23 September 2009 14:20

ppluvinet
Participant assidu
Lieu: VALENCE
Date d'inscription: 6 Aug 2007
Messages: 617

Re: postgresql : table avec privilèges

Merci Mathieu,
Mon but final était de pouvoir donner à certains utilisateurs tous les droits sur mes tables. Pour cela, je me suis appercu que pour selectionner toutes les tables dont je suis le propriétaire, je n'avais pas forcément besoin du champ relacl
et j'ai trouvé la fonction pg_get_userbyid(relowner) from pg_class.


En cadeau, je vous donne la fonction qui permet donc à un utilisateur A de donner tous les droits à un utilisateur B sur toutes les tables de l'utilisateur A:


Code:

CREATE SCHEMA acl_admin;

CREATE OR REPLACE FUNCTION acl_admin.grant_on_all(text, text, text)
RETURNS TEXT STRICT VOLATILE AS '
DECLARE
    usr ALIAS FOR $1;
    prv ALIAS FOR $2;
    own ALIAS FOR $3;
    rel record;
    sql text;
BEGIN
    FOR rel IN SELECT pg_catalog.quote_ident(schema_name) AS schema_name,
                      pg_catalog.quote_ident(relation_name) AS relation_name
        FROM acl_admin.schema_and_relation_view 

        where relation_name not in (''geometry_dump'',''plr_environ_type'',''r_typename'') 
         and relation_name  in 
(select  c.table_name
from  (select c.relnamespace, c.relname as table_name, pg_get_userbyid(c.relowner) as table_owner, c.relacl from pg_class as c) as c 
join pg_namespace n 
on n.oid = c.relnamespace and c.table_owner = own)
order by schema_name, relation_name
    LOOP sql := ''GRANT '' || prv || '' ON '' || rel.schema_name || ''.'' || rel.relation_name || '' TO '' || usr;
        RAISE NOTICE ''%'', sql;
        EXECUTE sql;
    END LOOP;
    RETURN ''OK'';
END;
' LANGUAGE 'plpgsql';
COMMENT ON FUNCTION acl_admin.grant_on_all(text,text)
IS 'Given a user name and privilidge, execute GRANT privilidge ON all relations in all schemas TO user.';

CREATE OR REPLACE FUNCTION acl_admin.grant_on_all(text,text)
RETURNS TEXT STRICT VOLATILE AS
'SELECT acl_admin.grant_on_all($1, ''ALL''::text,$2);'
LANGUAGE 'sql';
COMMENT ON FUNCTION acl_admin.grant_on_all(text)
IS 'Given a user name, execute GRANT ALL ON all relations in all schemas TO user.';




 select acl_admin.grant_on_all('utilisateur B','utilisateur A');

Je me suis inspiré également de cette page :
http://labs.alunys.com/viewvc/projects/ … iew=markup


A bientôt

Dernière modification par ppluvinet (Wed 23 September 2009 16:26)


Pascal PLUVINET

Hors ligne

 

Pied de page des forums

Powered by FluxBB