Quid du schéma public ?

ASGARD interdit le référencement[1] de certains schémas, les excluant de fait de ses mécanismes de gestion des droits :

  • les schémas système de PostgreSQL – pg_catalog et les schémas pg_toast[...], pg_temp[...] ;

  • le schéma d'information information_schema ;

  • le schéma topology de l'extension PostGIS Topology ;

  • le schéma public.

Les droits alloués sur les trois premiers n'ayant pas vocation à être modifiés sauf situation exceptionnelle, leur exclusion est transparente pour les administrateurs.

Il en va autrement du schéma public, dans lequel certains utilisateurs ont l'habitude de travailler et pour lequel se posent donc des questions de droits sur les données. C'est par exemple dans le schéma public que QGIS crée la table layer_styles qui permet le stockage en base des paramètres de style des couches. Pour que les styles par défaut s'affichent à l'ouverture des couches, il est nécessaire que l'utilisateur dispose du privilège SELECT sur ladite table layer_styles.

Pour le cas spécifique de layer_styles, ASGARD met à disposition une fonction, asgard_layer_styles, qui facilite la définition de droits en lecture et en écriture adaptés à différentes organisations.

Remarque

S'il n'est plus pris en compte par la suite, l'installation d'ASGARD a un effet direct sur le schéma public : la suppression du privilège CREATE alloué par défaut au pseudo-rôle public pour ce schéma, qui autorisait tout utilisateur à y créer des objets. Un tel privilège représenterait en effet une faille de sécurité majeure dans un système qui prévoit l'existence d'un rôle de connexion anonyme ouvert à tous tel que consult.defaut.

ComplémentPourquoi certains utilisateurs de QGIS 3.10 ne peuvent-ils pas enregistrer de styles ?

Même si on leur a alloué tous les privilèges d'édition nécessaires sur la table layer_styles, la plupart des utilisateurs des versions de QGIS antérieures à la 3.14 se verront retourner des messages d'erreur lorsqu'ils tenteront d'enregistrer un style dans la base de données.

La raison est que, dans ces versions, QGIS fait précéder toutes les commandes de modification de layer_styles de l'instruction CREATE TABLE IF NOT EXISTS layer_style [...]. L'intention est bonne - il s'agit de créer la table si elle n'existe pas avant de tenter d'agir sur son contenu - mais cette instruction provoquera systématiquement une erreur si l'utilisateur n'est pas habilité à créer des objets dans le schéma public. L'erreur se produit même si layer_styles existe déjà et que la modification demandée aurait donc bien pu être effectuée si elle n'avait pas été précédée de cette instruction inutile. Or, comme évoqué précédemment, ASGARD s'assure justement que tous les rôles n'aient pas nativement la possibilité de créer des objets dans public...

Il n'y a pas de bonne solution à ce problème, heureusement corrigé à partir de la version 3.14 de QGIS. Donner le privilège CREATE sur public - GRANT CREATE ON SCHEMA public TO editeurs_layer_styles ; - aux rôles susceptibles d'éditer les styles est objectivement la seule option et elle n'est guère satisfaisante.