PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#1 18/11/2018 19:24:52

ramirez22
Membre

[PG10] Supprimer ROLE après déconnexion

Bonsoir à toutes et  tous.

Je reviens vers vous car je n'ai pas réussi à trouver la solution.
Est-il possible - simplement - de supprimer ou modifier un ROLE seulement après sa déconnexion ?

En gros, j'ai un profil admin, je veux modifier un autre ROLE qui a certains droits.
Si le rôle est connecté, je veux que les modifications ne s'appliquent qu'au moment où il se déconnecte (pour éviter des droits acquis non pris en compte par l'application, qui charge ces droit au démarrage uniquement).

J'ai déjà essayé de modifier le ROLE lors d'une session et bingo : l'appli plante car l'utilisateur n'a plus les mêmes droits. Et je ne peux pas m'amuser à vérifier les droits à chaque requête ...

J'imagine que les TRIGGERS vont entrer en jeu et je ne maitrise pas du tout le sujet.

Si quelqu'un a déjà une solution, je suis preneur. Sinon, comme d'habitude, je noterai dans ce billet les tests, succès et échecs pour les prochains big_smile

Bonne soirée.

Hors ligne

#2 18/11/2018 19:30:52

rjuju
Administrateur

Re : [PG10] Supprimer ROLE après déconnexion

Je ne suis pas sur de comprendre.  Si vous vérifiez les droits dans l'application, je suppose que vous ne parlez pas d'un rôle postgres mais d'un rôle applicatif ?  Ce n'est pas très clair.

Hors ligne

#3 19/11/2018 08:49:17

ramirez22
Membre

Re : [PG10] Supprimer ROLE après déconnexion

Bonjour,


Désolé si je n'ai pas été clair, je vais reformuler.


Mon application se connecte à la base PostgreSQL.
Chaque utilisateur a un ROLE ne possédant qu'un droit en LOGIN. L'accès à l'application est assujettie à la réussite d'ouverture d'une session sur la base (erreur d'accès à la base, pour quelque raison que ce soit : l'appli se ferme).
Il existe plusieurs ROLE groupe qui octroient les privilèges en SELECT, UPDATE etc... (cela simplifie les changement de droits puisqu'il suffit de déplacer un utilisateur d'un groupe à un autre avec GRANT/REVOKE).
Nombre de connexions simultanées potentielles : 20.
Lors d'un changement de droit (si un utilisateur doit avoir des droits supérieurs suite à une formation par exemple), je ne veux pas que ce changement soit effectif immédiatement. En effet, j'ai les mêmes horaires que mes collègues, le risque que ma saisie survienne alors que ce dernier est en cours de modification d'une ligne et paf, l'application risque de planter (si les droits de la manipulation qu'il était en train de faire sont révoqués par exemple).
Dans la pratique, le cas de figure risque peu d'arriver : généralement, les privilèges vont dans l'ordre croissant, donc l'utilisateur risque peu de se voir refuser une transaction pour cause de droits insuffisant. De plus, il est simple de donner un coup de téléphone : "Salut, je vais changer tes droits d'accès, tu peux te déconnecter quelques minutes s'il te plait ?".
Mais la loi de Murphy étant ce qu'elle est, il arrivera un jour où un administrateur (et moi y compris) changera les droits d'un utilisateur "par erreur", ou supprimera un utilisateur parce qu'il n'est plus dans le service et se trompera de ligne ... etc.
Je peux bien sûr faire un simple contrôle de connexion ("est-ce que untel est connecté ? Si non, appliquer les changements") mais si l'utilisateur est en train d'importer quelques milliers de lignes, je ne veux pas faire crasher cet import en le déconnectant "à la sauvage", ni attendre sagement qu'il ait fini (à moins qu'il n'y ai pas d'autre solution... sad ). En effet, je ne suis pas connecté en permanence sur l'application et donc sur la base (j'ai d'autres fonctions que d'administrer cette base et de développer cette appli). Donc ma session de mon application n'est pas ouverte en permanence et je ne peux pas automatiser ce "contrôle de non connexion" directement depuis mon application.


D'où ma question : est-il possible de faire de sorte que ma demande de GRANT/REVOKE ne soit appliquée QUE SI l'utilisateur n'est pas connecté (ça c'est facile depuis mon application puisque le contrôle est immédiat et l'application aussi si les conditions sont réunies) OU SINON que les changements soient appliqués dès qu'il se déconnecte (et ça, ça doit être automatisée par le serveur car il se déconnectera peut-être à 18h30 alors que je serai parti à 16h30) ?


J'espère avoir été plus clair, n'hésitez pas à me poser d'autres questions si besoin de plus de détails.


Cdt,
Ramirez22

Hors ligne

#4 19/11/2018 11:24:26

gleu
Administrateur

Re : [PG10] Supprimer ROLE après déconnexion

est-il possible de faire de sorte que ma demande de GRANT/REVOKE ne soit appliquée QUE SI l'utilisateur n'est pas connecté (ça c'est facile depuis mon application puisque le contrôle est immédiat et l'application aussi si les conditions sont réunies)

Pas directement, mais il est possible de créer une fonction qui n'applique le GRANT/REVOKE que si la personne est déconnectée. Ceci étant dit, même là, vous n'êtes pas à l'abri que l'utilisateur se connecte entre le test de présence et l'application du GRANT/REVOKE, mais a priori, il aura eu peu de temps pour faire autre chose.

OU SINON que les changements soient appliqués dès qu'il se déconnecte (et ça, ça doit être automatisée par le serveur car il se déconnectera peut-être à 18h30 alors que je serai parti à 16h30) ?

Pas possible. Pour ça, j'aurais tendance à créer un script exécuté par cron qui regardera les opérations à réaliser et ne les exécutera que si l'utilisateur correspondant est déconnecté.


Guillaume.

Hors ligne

#5 19/11/2018 11:56:33

rjuju
Administrateur

Re : [PG10] Supprimer ROLE après déconnexion

Le plus simple serait quand même d'appliquer le changement de profil directement, et de gérer correctement les erreurs dans l'application.  Cela devrait être de toutes façons fait, vous n'êtes probablement pas à l'abri de toute autre erreur lors de l'exécution d'une requête, autant que votre application ne plante pas.

Hors ligne

#6 25/11/2018 19:55:29

ramirez22
Membre

Re : [PG10] Supprimer ROLE après déconnexion

rjuju a écrit :

Le plus simple serait quand même d'appliquer le changement de profil directement, et de gérer correctement les erreurs dans l'application.  Cela devrait être de toutes façons fait, vous n'êtes probablement pas à l'abri de toute autre erreur lors de l'exécution d'une requête, autant que votre application ne plante pas.


Vous avez sans aucun doute raison. C'est du boulot que de traiter toutes les erreurs possibles, mais la stabilité de l'application ne doit pas être mise en cause.
Du coup, je suis parti sur un blocage de l'opération de suppression du ROLE si celui-ci est connecté. Un symbole dans la liste des users permet de voir d'un coup d’œil si c'est le cas. De plus, l'admin a accès au mail de l'utilisateur (je réfléchi à la possibilité de mettre également le téléphone), comme ça il n'a plus qu'a le prévenir pour que ce dernier se déconnecte.


Je vais peut-être également donner la possibilité à l'administrateur de forcer la déconnexion de l'utilisateur, mais j'hésite encore. C'est un peu brutal ... big_smile


Bonne soirée

Hors ligne

Pied de page des forums