Index of /romuald.thion/files/Enseignement/TIW4/TP-Authorization-PG

[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]RBAC_db.sql2020-12-01 13:18 1.4K 
[TXT]RBAC_rapport.md2020-12-01 17:00 2.9K 
[   ]RBAC_toy_sample.sql2020-12-01 11:44 1.4K 
[   ]RBAC_views.sql2020-12-01 17:17 654  
[TXT]README.html2020-12-02 18:44 14K 
[TXT]README.md2020-12-02 18:44 10K 
[TXT]pandoc.css2020-12-01 17:13 16K 

TP TIW4 2020-2021 autorisation

TP TIW4 2020-2021 autorisation

TP TIW4 2020-2021 “autorisation” : sujet

Introduction

Ce TP a trois objectifs :

Il y a donc deux modèles de contrôle d’accès : celui du SBGD PostgreSQL lui même et celui d’une hypothétique application. En ce sens, le modèle de contrôle système de PostgreSQL est le modèle d’administration de votre modèle de contrôle applicatif que vous implémentez sous forme relationnelle.

Modalités de rendu

Une trame de départ à compléter est fournie, c’est le fichier RBAC_rapport.md. Cette trame est obligatoire, elle reprend la structure du sujet et contient des questions auxquelles il faut répondre.

Conseils

Exemple d’extrait du fichier ~/.ssh/config, ici pour le groupe 42, après avoir mis la clef privée ~/.ssh/tiw4-authentication.pem :

# TP TIW4 Authorization PostgreSQL
Host tiw4-authorization-pg
  HostName tiw4-authorization-pg-42.tiw4pg.os.univ-lyon1.fr
  User ubuntu
  IdentityFile ~/.ssh/tiw4-authentication.pem

Changelog

Prise en main

Machine virtuelle

Le nom DNS d’une VM Ubuntu 20.04.1 avec PostgreSQL de configuré vous est fournie dans Tomuss. La clef privée pour y accéder est la même que le précédent TP TIW4, elle est rappellée dans le Discord.

Création de bases et utilisateurs

La configuration de PostgreSQL déjà fournie dans les fichiers /etc/postgresql/13/main/pg_hba.conf et /etc/postgresql/13/main/postgresql.conf doit permettre de se connecter depuis la VM d’un autre groupe.

Le modèle de contrôle d’accès applicatif

On va commencer par le modèle applicatif modélisé selon le modèle RBAC. C’est le modèle qui permet dans votre application de déterminer les droits des utilisateurs en son sein. Les ressources dont on va contrôler les accès sont les routes d’une API REST :

Schéma de départ

Consulter puis exécuter avec l’utilisateur responsable dans la base test le script RBAC_db.sql.

Jeu d’essai

Peupler la base de départ avec le fichier RBAC_toy_sample.sql

Calcul des décisions d’accès

A partir du fichier de départ RBAC_views.sql :

Tester sur le jeu d’essai. Vérifier en particulier que votre calcul est robuste quel que soit le contenu de rbac.inherits.

Vous pourrez avoir des difficultés sur la vue récursive, consulter par exemple ce tutoriel.

Extension aux sessions

Créer la table rbac.session et les relations associées pour ajouter les sessions à votre modèle.

Ensuite, créer un trigger qui garantit la contrainte d’inclusion des rôles endossés dans la session. On ne gèrera que les rôles explicitement affectés via rbac_ura, sans prendre en compte l’héritage.

Définir la fonction rbac.authorized_actions_session(user_name, object_name) qui renvoie la liste des actions autorisées à travers les rôles que l’utilisateur endosse dans ses sessions.

Remarques :

Gestion des droits sur le modèle

Modèle d’administration, base

Maintenant, on veut gérer les droits sur cette base de données avec le système de droit de PostgreSQL. Appelons :

On va donner les droits suivants :

Remarque

Il y a des droits à trois niveaux différents d’organisation des données dans PostgreSQL :

Et aussi des droits sur les autres objets (DOMAIN, FUNCTION etc.)

Si vous révoquez les droits à un niveau supérieur (e.g., CONNECT ON DATABASE) cela ne modifie pas les droits sur les schémas et tables aux niveaux inférieurs (quand vous redonnez CONNECT, ca revient comme avant). Et, piégeux, il y a deux privilèges niveau schéma : CREATE | USAGE qu’on oublie souvent.

Finalement avoir accès SELECT à une table il faut que le trois niveaux laissent passer :

Délégation à l’adjoint

Ensuite, on souhaite autoriser adjoint à modifier les affectations entre rôles et permissions et la hiérarchie de rôle mais on souhaite limiter ces modifications à un sous enssemble des rôles existants qu’on appelle les rôles délégués.

Pour cela, ajouter une colonne booléenne delegate à la table rbac.role, fausse par défaut. Cette colonne indique si la modification de ce rôle peut être déléguée à l’utilisateur adjoint.

En utilisant le mécanisme de row security policies avec la commande CREATE POLICY faites en sorte que adjoint ne puisse modifier (INSERT, DELETE, UPDATE) les tables rbac.pra et rbac.inherits que pour les rôles délégués, c’est-à-dire ceux où le nouvel attribut rbac.role.delegate est true.

Pour rbac.inherits, adjoint ne pourra que donner des permissions à d’autres rôles par l’héritage de rôles déléguables, mais ne pourra pas en acquérir. En d’autres termes on peut ajouter des enfants à un rôle délégable, mais pas des parents (ce qui créerait des droits).