Aller au contenu

Droits et groupes

Les droits s’accordent à des groupes, jamais à des personnes une par une, et ils s’additionnent : une personne reçoit l’union des droits de tous ses groupes. Les droits sur les données sont appliqués par Trino lui-même, qui interroge l’API avant chaque instruction : l’éditeur visuel, le SQL, les tableaux de bord, le copilot, l’API et le serveur MCP passent tous par là. Voir Principes.

Deux groupes existent toujours :

GroupeRôle
Administrateurslisent tout, peuvent tout faire ; leurs droits ne se règlent pas
Tous les utilisateurschaque personne en fait partie ; sa liste ne se modifie pas. Ce qu’on lui accorde, tout le monde l’a

Les autres groupes se créent dans Administration › Groupes. Accordez les accès larges à des groupes dédiés plutôt qu’à Tous les utilisateurs.

Dans Administration › Personnes, un administrateur :

  • crée une personne, avec un mot de passe (10 caractères au moins) ou sans — elle se connectera alors par l’authentification unique ;
  • l’invite : un lien valable 7 jours, envoyé par e-mail si un serveur SMTP est configuré, à transmettre à la main sinon ;
  • règle ses groupes et ses attributs ;
  • la désactive : ses sessions sont aussitôt fermées.

Sans être administrateur, un groupe peut recevoir trois droits, que seuls les administrateurs accordent :

DroitPermet
Gérer les sourcesconnecter des bases, modifier leurs réglages, lancer une synchronisation
Gérer les métadonnéeslibellés, descriptions, types sémantiques, relations et valeurs dans Structure
Gérer les permissionsgroupes, membres, droits sur les données

Administration › Permissions règle, pour un groupe, l’accès à une source entière, puis l’affine par schéma ou par table. Pour un groupe, le réglage le plus précis l’emporte ; Hérité reprend le niveau du dessus.

AccèsEffet
Aucun accèsla source, le schéma ou la table n’existent pas pour le groupe
Lecturetoutes les lignes et toutes les colonnes
Restreintlisible, sous les règles de colonnes et de lignes du groupe ; jamais en SQL natif

« Lecture » l’emporte sur « Restreint » : si un autre groupe de la personne lit la table en entier, les règles de colonnes et de lignes de ce groupe ne s’appliquent pas.

Une table interdite est invisible partout : l’autocomplétion ne la propose pas, SHOW TABLES ne la liste pas, et une requête qui la cite échoue avec « Accès aux données refusé ».

À côté de l’accès, chaque groupe reçoit un niveau de requête par source : ce qu’il peut écrire contre elle.

NiveauPermet
Aucune requêtelire les questions et tableaux de bord existants, sans en écrire
Éditeur visuelconstruire des questions à la souris
SQLécrire du SQL Trino, des colonnes personnalisées et des conditions SQL
SQL natifécrire dans le dialecte de la base, si la source l’autorise

Sur une table en accès Restreint, chaque colonne se règle pour le groupe :

AccèsEffet
Lisiblela valeur telle quelle (par défaut)
Masquéela colonne existe, mais Trino remplace sa valeur
Cachéela colonne n’existe plus pour le groupe : absente de SELECT *, refusée si on la nomme

Le masque d’une colonne masquée est une expression Trino sur la colonne, par exemple substr(email, 1, 3) || '…'. Sans expression, un texte garde ses deux premiers caractères suivis de •••, et toute autre valeur devient NULL.

Une table en accès Restreint peut porter, pour un groupe, une règle de lignes : des conditions sur ses colonnes, combinées par toutes les conditions (et) ou au moins une condition (ou). Opérateurs : est égal à, est différent de, est parmi, n’est pas parmi, supérieur, inférieur, contient, est vide, n’est pas vide.

Une valeur peut citer un attribut de la personne qui lit :

region est égal à {{user.region}}
canal est parmi {{user.canaux}}
vendeur est égal à {{user.email}}

La règle est traduite en un filtre de ligne que Trino ajoute à chaque lecture de la table, d’où qu’elle vienne.

  • Les attributs se saisissent sur la personne (Administration › Personnes), ou viennent des claims de votre fournisseur OIDC. Trois sont intégrés et ne se saisissent pas : {{user.id}}, {{user.email}} et {{user.name}}.
  • Plusieurs valeurs. Un attribut qui contient des virgules (Bretagne,Normandie) vaut plusieurs valeurs : est égal à {{user.region}} laisse alors passer les deux régions.
  • Un attribut absent ferme. Une personne sans l’attribut cité ne voit aucune ligne : un attribut manquant n’ouvre jamais l’accès.
  • Plusieurs groupes. Une personne voit les lignes que laisse passer l’une de ses règles. Un groupe en accès Restreint sans règle sur la table en lit toutes les lignes.
  • Une règle cassée ferme. Si une colonne citée disparaît, la règle ne laisse plus rien passer, plutôt que tout.

Le contenu — questions, modèles, métriques, tableaux de bord — se range dans des dossiers, dont les droits se règlent aussi par groupe, dans l’onglet Dossiers de Administration › Permissions :

DroitPermet
Aucunle dossier est invisible
Lectureouvrir son contenu
Modificationy créer, modifier, déplacer et supprimer du contenu
Gestionet régler les droits du dossier

Les droits d’un dossier valent pour son contenu et ses sous-dossiers, sauf réglage plus fin. Les dossiers personnels restent privés. Un élément peut en plus être partagé avec une personne ou un groupe, en lecture ou en modification. Les deux mécanismes s’additionnent : voir Partage.

  • La session est un cookie httpOnly, SameSite=Lax, valable 14 jours par défaut (SESSION_DAYS) ; il devient Secure quand l’adresse publique est en https://.
  • Toute écriture faite avec ce cookie exige l’en-tête X-Eodia-Csrf: 1, qu’un autre site ne peut pas poser.
  • Un jeton d’intégration eoi_… porte les droits de son propriétaire, ni plus ni moins.

Administration › Journal d’audit garde une trace de chaque action sensible : échecs de connexion, changements de mot de passe, personnes, groupes et membres, permissions, sources et métadonnées, dossiers, partages et liens, jetons, invitations, secrets d’intégration et réglages. On le filtre par type d’action ou par personne.

eodia insights est un logiciel libre d’Eodia.