Vous n'êtes pas identifié(e).

#1 19/10/2020 14:52:52

rmayou
Membre

Ajout et suppression de colonnes conditionnés par la propriété

Bonjour tout le monde,

Je commence en précisant la version de mon PostgreSQL (bien qu'avec la 11 j'ai le même problème) : PostgreSQL 9.5.9, compiled by Visual C++ build 1800, 64-bit

Je remarque qu'il n'est pas possible pour mes utilisateurs de créer ou de supprimer une/plusieurs colonnes de la table, sachant que leurs privilèges sont les suivants:

-1 des privilèges UC au niveau du schéma.
-2 Des privilèges arwdDxt sur la table de ce schéma

Pour qu'ils puissent ajouter/supprimer des colonnes il semblerait qu'ils doivent être propriétaire de la table. C'est en tout cas ce que semble m'indiquer le réponse à la requête:
ERROR: ERREUR:  doit être le propriétaire de la table test


SQL state: 42501


Aurai-je raté quelque chose dans l'attribution de mes privilèges, ou bien l'attribbution de la propriété est-elle nécessaire?

Par avance, je vous remercie.

Cordialement,

Rémi

Hors ligne

#2 19/10/2020 15:43:01

ruizsebastien
Membre

Re : Ajout et suppression de colonnes conditionnés par la propriété

Bonjour,

si on regarde la doc :
https://docs.postgresql.fr/12/ddl-priv.html

on peut voir que tous ces droits arwdDxt sont suffisants pour pleins de chose sauf pour altérer la table en question.
Il faut être propriétaire de la table pour utiliser ALTER TABLE :

https://docs.postgresql.fr/12/sql-altertable.html

Dernière modification par ruizsebastien (19/10/2020 15:43:25)


Cordialement,

Sébastien.

Hors ligne

#3 19/10/2020 17:11:56

rmayou
Membre

Re : Ajout et suppression de colonnes conditionnés par la propriété

"Le droit de modifier ou de détruire un objet est le privilège du seul propriétaire."

ça a le mérite d'être clair en effet.

Dans l'idée que je me faisais des privilèges utilisateurs de Postgresql, la modification/création/suppression des colonnes d'une table pouvait se faire autrement que part le propriétaire. C'est un peu dommage parceque mon souhait final est de permettre à mes utilisateurs de créer/supprimer/modifier les colonnes d'une table sans qu'ils puissent pour autant supprimer cette dernière. Or en les plaçant propriétaires, la suppression de la table leur est rendue possible.

Merci ruizsebastien pour ces infos.

Hors ligne

#4 19/10/2020 18:30:27

rjuju
Administrateur

Re : Ajout et suppression de colonnes conditionnés par la propriété

Vous avez toujours la possibilité de créer des fonctions en tant que "SECURITY DEFINER", créées à l'aide d'un rôle permettant d'effectuer les modifications que vous souhaitez, afin d'offrir à vos utilisateurs une API pour modifier / créer / supprimer des colonnes d'une table en gérant vous mêmes les autorisations.

Hors ligne

#5 21/10/2020 10:24:35

gleu
Administrateur

Re : Ajout et suppression de colonnes conditionnés par la propriété

De toute façon, si vous pouviez leur donner le droit d'ajouter et supprimer des colonnes mais pas celui de supprimer la table, il suffirait de supprimer toutes les colonnes pour avoir l'équivalent d'une suppression de la table. Je ne vois pas bien la sécurité que cela vous apporterait réellement.


Guillaume.

Hors ligne

#6 21/10/2020 17:17:14

rmayou
Membre

Re : Ajout et suppression de colonnes conditionnés par la propriété

Merci rjuju pour la suggestion de création de fonction. Ce n'est pas encore une partie de Postgres que je maîtrise. Je vais donc me renseigner d'abord.

Effectivement votre remarque gleu est plutôt juste. C'est simplement que je me projetais sur la suppression par inadvertance par un utilisateur. J'imagine qu'il est le plus souvent préférable de travailler avec une table dont une colonne a été supprimée par accident plutôt que pas de table du tout.

Si je trouve une solution satisfaisante je la posterai.

Bonne journée.

Hors ligne

#7 22/10/2020 18:32:04

Scip
Membre

Re : Ajout et suppression de colonnes conditionnés par la propriété

Bonjour rmayou,

Si vous donnez le rôle propriétaire aux utilisateurs, vous pouvez aussi les restreindre avec un trigger d'évènement (event trigger) qui tomberait en erreur dans les cas où vous jugeriez bon que ce soit interdit (logique : tout est autorisé sauf....)
Cela permettrait d'éviter de créer des fonctions pour tous les cas "autorisés" (logique du moindre privilège, préférable tout de même dans un contexte sécuritaire).

Bonne journée

Hors ligne

Pied de page des forums