Skip site navigation (1) Skip section navigation (2)

Re: Quels sont les droits utilisateur nécessaire pour pouvoir exécuter ALTER TABLE "..." DISABLE TRIGGER ALL ?

From: Marc Cousin <cousinmarc(at)gmail(dot)com>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: Quels sont les droits utilisateur nécessaire pour pouvoir exécuter ALTER TABLE "..." DISABLE TRIGGER ALL ?
Date: 2010-10-20 11:38:51
Message-ID: 201010201338.51525.cousinmarc@gmail.com (view raw or flat)
Thread:
Lists: pgsql-fr-generale
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 ?

In response to

Responses

pgsql-fr-generale by date

Next:From: REISS Thomas DSIC BIPDate: 2010-10-20 11:56:52
Subject: Re: Flyer de promotion de la version 9.0
Previous:From: Stéphane A. SchildknechtDate: 2010-10-20 08:22:28
Subject: Re: Flyer de promotion de la version 9.0

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group