Re: [pgsql-fr-generale] Quels sont les droits utilisateur nécessaire pour pouvoir exécuter ALTER TABLE "..." DISABLE TRIGGER ALL ?

From: Cédric Villemain <cedric(dot)villemain(dot)debian(at)gmail(dot)com>
To: Marc Cousin <cousinmarc(at)gmail(dot)com>
Cc: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: [pgsql-fr-generale] Quels sont les droits utilisateur nécessaire pour pouvoir exécuter ALTER TABLE "..." DISABLE TRIGGER ALL ?
Date: 2010-10-20 13:14:29
Message-ID: AANLkTi=pAjaqLw5VuAueZetWz8JcT=HEtCefKVjoF-xn@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Le 20 octobre 2010 13:38, Marc Cousin <cousinmarc(at)gmail(dot)com> a écrit :
> The Tuesday 19 October 2010 16:58:00, Stéphane Klein wrote :
>> Bonjour,
>>
>> quand j'exécute la requête
>>
>> ALTER TABLE "Laboratory" DISABLE TRIGGER ALL;
>>
>> avec un utilisateur non admin "foobar" j'ai l'erreur suivante :
>>
>> ERREUR:  droit refusé : « RI_ConstraintTrigger_21913 » est un trigger
>> système
>>
>>
>> Cet utilisateur "foobar" a les droits suivant :
>>
>> rolsuper : f
>> rolinherit : t
>> rolcreaterole : f
>> rolcreatedb : t
>> rolcatupdate : f
>> rolcanlogin : t
>>
>> J'aimerai savoir qu'est ce que je dois modifier au niveau de mon
>> utilisateur "foobar" pour qu'il puisse créer et détruire des triggers ?
>>
>> Quand je réalise ALTER TABLE "Laboratory" DISABLE TRIGGER ALL; avec les
>> droits administrateur (utilisateur postgres), ça fonctionne correctement.
>>
>> Merci d'avance pour votre aide.
>>
>> Cordialement,
>> Stéphane
>
> Désolé pour le temps de réponse (le temps de monter un test :) )
>
> À priori, c'est sans solution propre:
>
> le trigger RI_ConstraintTrigger_21913 implémente une foreign key. C'est un
> trigger système, puisque vous ne l'avez pas créé (vous avez fait un alter
> table Laboratory add foreign key…).
>
> Si vous voulez ne pas avoir l'erreur, vous devrez désactiver (probablement
> même supprimer) la contrainte d'intégrité.
>
> Ou bien mettre votre utilisateur superuser (ce qui est assez limite niveau
> sécurité, si c'est un utilisateur applicatif).
>
> Malgré tout, c'est dans la doc:
> http://docs.postgresql.fr/8.4/sql-altertable.html
>
> «ALL
> Désactiver ou activer tous les déclencheurs appartenant à la table. (Les
> droits de superutilisateur sont nécessaires si l'un des déclencheurs concerne
> une contrainte de clé étrangère.)»
>
> Même si je trouve que c'est un peu un gotcha à la MySQL…
>
> ==== Digression ====
>
> Je ne suis pas sûr que quelqu'un qui demande la désactivation de tous les
> triggers d'une table veuille vraiment qu'on lui désactive aussi ses
> contraintes d'intégrité. Et je suis encore moins sûr qu'il veuille qu'on lui
> réactive ses contraintes d'intégrité sans recontrôler la cohérence… (je
> n'étais pas conscient qu'on pouvait faire ça :( )
>
>
> Par exemple:
>
> CREATE TABLE test (a int);
> CREATE TABLE test2 (a int primary key);
> ALTER TABLE test add foreign key (a) references test2(a);
>
> INSERT INTO test values(1);
> ERROR:  insert or update on table "test" violates foreign key constraint
> "test_a_fkey"
> DETAIL:  Key (a)=(1) is not present in table "test2".
>
> => Normal
>
> ALTER TABLE test DISABLE TRIGGER all;
> INSERT INTO test values(1);
>
> => Pas vraiment normal
>
> ALTER TABLE test ENABLE TRIGGER all;
>
> => Pas de revalidation. Ouch. On a une base avec une contrainte d'intégrité en
> place, mais l'intégrité qui est fausse.
>
>
> Des avis là-dessus ?

le mot clef ALL est un mauvais choix pour un utilsateur normal. Cela
signifie qu'en cas d'évolution du schéma l'appli pourrait continuer
une action qui ne serait pas 'propre' (par exemple si un nouveau
trigger est ajouté et qu'il ne faut pas le désactiver)

Si les triggers ont bien été désactivés nommément on réduit les risques.

>
> --
> Sent via pgsql-fr-generale mailing list (pgsql-fr-generale(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-fr-generale
>

--
Cédric Villemain               2ndQuadrant
http://2ndQuadrant.fr/     PostgreSQL : Expertise, Formation et Support

In response to

Browse pgsql-fr-generale by date

  From Date Subject
Next Message o.fournier@iktios.fr 2010-10-20 13:40:34 mauvais lien
Previous Message Cédric Villemain 2010-10-20 13:07:45 Re: Flyer de promotion de la version 9.0