Privilèges et cohabitation avec Asgard

Privilèges

Les données du schéma z_plume alimentent le plugin QGIS Plume et doivent dès lors être accessibles à tous ses utilisateurs. Pour simplifier la gestion des droits, le pseudo rôle public reçoit automatiquement les privilèges suivants lorsque PlumePg est installée sur une base :

  • USAGE sur le schéma z_plume ;

  • SELECT sur toutes les tables et vues de ce schéma.

Des droits étendus sont par ailleurs conférés à public sur la table z_plume.stamp_timestamp (privilèges SELECT, INSERT, UPDATE, DELETE), combinés à un contrôle d'accès opéré par un déclencheur. L'ensemble permet au propriétaire d’une table et à lui seul de modifier manuellement les dates enregistrées pour cette table.

ComplémentNote sur le contrôle d'accès sur stamp_timestamp

Le contrôle d’accès sur la table z_plume.stamp_timestamp est réalisé par un déclencheur et non des politiques de sécurité niveau ligne, car l’usage de ces dernières par les extensions provoque actuellement des erreurs en cas de sauvegarde/restauration.

Hormis pour la table z_plume.stamp_timestamp, les données de PlumePg ne peuvent donc nativement être éditées que par le rôle propriétaire des objets de l'extension. L'administrateur du serveur devra manuellement conférer des privilèges supplémentaires sur ces objets s'il estime que d'autres rôles doivent, par exemple, être habilités à définir des modèles personnalisés.

Cohabitation avec Asgard

Il n’y a pas de lien fonctionnel direct entre PlumePg et l’extension Asgard, outil créé dans le cadre du GT PostGIS pour faciliter la gestion des droits.

Si l’extension PlumePg est installée sur une base disposant déjà d'Asgard dans une version supérieure ou égale à la 1.3.2, g_admin sera automatiquement désigné comme producteur du schéma z_plume et public en sera fait lecteur. Il s’agit seulement de faciliter le travail de l’administrateur, cette opération ne crée aucune adhérence durable. Il est ensuite tout à fait possible, sans que cela ne pose de problème particulier, y compris lors des futures montées de version de PlumePg :

  • De choisir d’autres rôles comme producteur, éditeur et lecteur de z_plume, en veillant toutefois à ce que tous les rôles de connexion des utilisateurs de Plume soit membres directement ou par héritage de l'un au moins de ces rôles.

  • De déréférencer le schéma z_plume pour gérer ses droits hors d”Asgard.

  • De désinstaller Asgard.

Attention

Avec les versions d'Asgard strictement antérieures à la 1.4.1, des précautions doivent être prises pour assurer la bonne restauration d'une base sur laquelle :

  • les extensions Asgard et PlumePg sont activées simultanément ;

  • le schéma z_plume de PlumePg est référencé dans la table de gestion d'Asgard.

À défaut, le contenu de la table de gestion d'Asgard est susceptible d'être perdu au cours de la restauration, ce qui équivaut au déréférencement brutal de tous les schémas de la base, qui ne seront dès lors plus considérés par les mécanismes automatisés d'Asgard. Il reste possible de les référencer de nouveau, mais certaines informations devront alors être ressaisies manuellement (éditeur, lecteur, etc.).

Il est possible d'éviter ce problème en appliquant l'une des trois méthodes suivantes :

  • (recommandé) Mettre à jour Asgard en version 1.4.1 ou supérieur.

  • Ne pas référencer le schéma z_plume dans la table de gestion d'Asgard.

    À noter que ce schéma est automatiquement référencé à l'installation de PlumePg si Asgard était déjà active sur la base. Il est également référencé à chaque restauration de la base, même s'il ne l'était pas initialement.

    Il faudra donc le déréférencer avec la fonction d'Asgard prévue à cet effet, z_asgard_admin.asgard_sortie_gestion_schema :

    1
    2
    SELECT z_asgard_admin.asgard_sortie_gestion_schema('z_plume') ;
  • Procéder à une restauration par étape de la base :

    1. Restaurer d'abord la structure seule avec l'option -s / --schema-only de pg_restore.

    2. Exécuter la commande ci-dessous sur la base en cours de restauration.

      1
      2
      SELECT z_asgard_admin.asgard_sortie_gestion_schema('z_plume') ;
    3. Restaurer les données seules avec l'option -a / --data-only de pg_restore.

Plus de précisions dans l'issue #17 du GitHub d'Asgard.