Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#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.
Julien.
https://rjuju.github.io/
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