diff --git a/deploy/historisation/README.md b/deploy/historisation/README.md index 29031f2..8e36005 100644 --- a/deploy/historisation/README.md +++ b/deploy/historisation/README.md @@ -152,7 +152,7 @@ qu'on attend d'un journal, et ça laisse les tables de mesure hors de portée. sudo bash creer-role-lecture.sh ``` -Crée le rôle `evcs_lecture` en **lecture seule** et dépose son mot de passe dans +Crée le rôle `evcs_lecture` et dépose son mot de passe dans le `.env` à la racine du dépôt. Le mot de passe est généré, jamais choisi, et **n'est pas affiché** : il va du générateur au fichier, donc rien à recopier et rien à exposer dans une capture. @@ -286,7 +286,23 @@ quel tableau de bord en crée une copie personnelle et modifiable. Il ne **stocke** rien : il interroge les deux bases à la demande. Le perdre ne perd aucune mesure. Il n'écrit rien non plus — sa connexion PostgreSQL utilise -le rôle `evcs_lecture`, en lecture seule. +le rôle `evcs_lecture`. + +⚠️ **`evcs_lecture` N'EST PLUS EN LECTURE SEULE**, et ce README l'a longtemps +écrit à tort. Il porte un `INSERT` sur `evenement` (voir plus haut, annotations +manuelles) : SELECT partout, plus INSERT sur cette seule table. Vérifiable : + +```sh +psql -U evcs_lecture -d evcs -c "select table_name, privilege_type + from information_schema.table_privileges where grantee='evcs_lecture'" +``` + +Conséquence pratique : **ne pas confier ce rôle à un tiers** — un agent, un +service externe, un tableau de bord hébergé ailleurs. Le journal `evenement` +alimente les annotations Grafana, le rapport de nuit et l'attribution des +transitions ; une écriture venue d'ailleurs y serait indiscernable d'une nôtre. +Pour un tiers, créer un rôle dédié avec `SELECT` sur les seules tables dont il +a besoin. ### ⚠️ Ce que `--dry-run` ne peut pas vérifier