Dans une application utilisant une DB postgresql, j'ai des utilisateurs, des groupes et des tables. J'aimerais implémenter un système de droit d'accès aux éléments des table un peu dans le genre du filesystem. Je ne vaus pas restreindre l'accès aux tables mais aux entrées dans la table, comme les fichiers sour Linux. Ex: Le champ d'ID 3 de la table USERS appartient a tel utilisateur et seul lui peut le modifier.
L'application a beaucoup de tables, il faudrait une solution qui soit indépendante de chaque table. Cela doit être possible sans trop de problèmes avec des rules mais alors il faut en écrire 3 par table. Cela ne m'intéresse pas.
Est-il possible de gérer cela au niveau de postgresql de manière propre ?
L'idéal serait un truc du genre: une fonction LOGIN qui donne un curseur qui vérifie les droits des accès aux ressources et/ou qui ne voit que les ressources aux quelles il a accès.
La gestion des droits des utilsateurs postgresql peut-t'elle se faire au niveau des records et non des tables ? Si oui, j'ai pas trop trouvé comment.
Je ne vois pas d'autre solution que d'implémenter cela au niveau de l'application. Ce n'est pas un problème, cela tourne bien depuis 10 mois mais ce serait beaucoup plus efficace et flexible si postgresql savait faire cela.
# Re: Les droits en postgresql
Posté par pinky . Évalué à 1.
J'écris ce journal car j'ai vu dans le code d'une application qu'on pouvait faire cela avec Oracle.
En gros, on peut mettre une fontion policy à un shema qui ressemble à un morceau de code qui s'ajoute au where pour vérifier les droits. Mais je ne connais pas Oracle. Est-ce possible en Postgresql.
Ca a l'air cool, vu dans le code de compiere:
DBMS_RLS.ADD_POLICY (
'Compiere', -- object_schema
t.TableName, -- object_name
t.TableName || '_Pol', -- policy_name
'Compiere', -- function_schema
'Compiere_Context.GetPredicate', -- policy_function
NULL, -- statement_types 'SELECT,INSERT,UPDATE,DELETE'
TRUE, -- update_check
);
Et la fontion Compiere_Context.GetPredicate:
...
Predicate := 'AD_Client_ID IN (' || SYS_CONTEXT('CompiereInc','ClientList')·
|| ') AND AD_Org_ID IN (' || SYS_CONTEXT('CompiereInc','OrgList') || ')';
...
# Re: Les droits en postgresql
Posté par QuYuan . Évalué à 1.
Je débute en PostgreSQL, mais j'avais été amené à me poser la question
j'ai pas encore cherché la réponse mais je m'étais dit que si on ne peut définir de droits au niveau des entrées (t-uplets), il "suffirait" d'un champ "UID" et/ou "GUID"
et de créer des vues.
Avec les différentes contraintes d'integrité, il doit y avoir moyen de faire quelquechose de propre et solide purement au niveau du SGBD.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.