#!/bin/bash # Crée le rôle PostgreSQL en LECTURE SEULE dont Claude se sert pour analyser la # mémoire de mesures, et dépose son mot de passe dans le .env à la racine du # dépôt — celui que ce compte-là sait lire. # # Pourquoi un rôle séparé plutôt que le compte `evcs` : une mémoire dont tout # l'intérêt est de ne pas être réécrite ne se consulte pas avec un compte qui # peut écrire. Et un mot de passe d'analyse qui traîne dans un fichier lisible # ne doit pas être celui qui gouverne la base. # # Le mot de passe est GÉNÉRÉ, jamais choisi, et n'est PAS affiché : il va # directement du générateur au fichier. Rien à recopier, donc rien à exposer # dans une capture d'écran. # # Usage, depuis 10.10.10.22 : # cd /volume2/projects/EVCS/EVCS/deploy/historisation # sudo bash creer-role-lecture.sh set -euo pipefail cd "$(dirname "$0")" ENV_DEPOT="../../.env" if [ ! -f "$ENV_DEPOT" ]; then echo "REFUS : $ENV_DEPOT introuvable. Lancer ce script depuis le dépôt." exit 1 fi EXISTE=$(docker compose exec -T postgres psql -U evcs -d evcs -tAc \ "SELECT 1 FROM pg_roles WHERE rolname='evcs_lecture'" 2>/dev/null || true) if [ "$EXISTE" = "1" ]; then echo "Le rôle evcs_lecture existe déjà." if grep -q '^PG_LECTURE_PASSWORD=' "$ENV_DEPOT"; then echo "Et son mot de passe est déjà dans $ENV_DEPOT. Rien à faire." exit 0 fi echo "Mais son mot de passe est absent de $ENV_DEPOT — il va être RÉINITIALISÉ." fi MDP="$(openssl rand -hex 24)" docker compose exec -T postgres psql -U evcs -d evcs -v ON_ERROR_STOP=1 <> "$ENV_DEPOT" fi echo "✓ Rôle evcs_lecture créé, lecture seule." echo "✓ Mot de passe déposé dans $ENV_DEPOT — non affiché, rien à recopier." echo echo "Contrôle (doit renvoyer une erreur de permission) :" echo " docker compose exec -T postgres psql -U evcs_lecture -d evcs -c \"DELETE FROM mesure\""