From 7d07d52774c83f74d3e7592f0e7281be9832b11e Mon Sep 17 00:00:00 2001 From: duffyduck Date: Thu, 7 May 2026 15:06:43 +0200 Subject: [PATCH] =?UTF-8?q?docker:=20App-User=20statt=20root=20f=C3=BCr=20?= =?UTF-8?q?DB-Connection=20nutzen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bisher: Backend connectete als root (mit DB_ROOT_PASSWORD) – zu viele Privilegien (GRANT ALL ON *.*). Jetzt: Backend nutzt den App-User ${DB_USER}, den MariaDB beim ersten Container-Start automatisch über MARIADB_USER/MARIADB_PASSWORD anlegt. Dieser User bekommt von MariaDB direkt GRANT ALL PRIVILEGES auf ${DB_NAME}.* (= nur die OpenCRM-Datenbank, keine anderen Schemas). Ausreichend für Prisma db push (DDL+DML auf opencrm.*), nicht ausreichend für Schema-übergreifende Operationen oder mysql.user-Manipulation – wie es sein soll. DB_ROOT_PASSWORD bleibt für Adminer / Notfall-Wartung. .env.example dokumentiert den Mechanismus. Live-verifiziert: - Container läuft mit DATABASE_URL=mysql://opencrm:***@db:3306/opencrm - Prisma db push synced Schema - Login + alle CRUD-Operationen funktionieren Co-Authored-By: Claude Opus 4.7 (1M context) --- .env.example | 4 ++++ docker-compose.yml | 7 +++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index c9d83d97..d51617f7 100644 --- a/.env.example +++ b/.env.example @@ -18,6 +18,10 @@ FACTORY_DEFAULTS_DIR=./data/factory-defaults BACKUPS_DIR=./data/backups # ============== DATENBANK ============== +# Der App-User (DB_USER) wird beim ersten Start automatisch von MariaDB +# angelegt (über MARIADB_USER/MARIADB_PASSWORD im docker-compose) – mit +# GRANT ALL PRIVILEGES auf ${DB_NAME}.*. Damit nutzt das Backend NICHT root. +# DB_ROOT_PASSWORD ist nur für Adminer / Notfall-Wartung. DB_HOST=localhost # Im Container überschreibt docker-compose das auf "db" DB_NAME=opencrm DB_USER=opencrm diff --git a/docker-compose.yml b/docker-compose.yml index 89a347f7..d182800c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -48,8 +48,11 @@ services: db: condition: service_healthy environment: - # Connection ins Container-Netzwerk (Service-Name = Hostname) - DATABASE_URL: "mysql://${DB_USER}:${DB_ROOT_PASSWORD}@db:3306/${DB_NAME}" + # Connection ins Container-Netzwerk (Service-Name = Hostname). + # Wir nutzen den App-User ${DB_USER}, der von MariaDB beim ersten Start + # automatisch mit GRANT ALL PRIVILEGES auf ${DB_NAME}.* angelegt wird + # (über MARIADB_USER/MARIADB_PASSWORD). KEIN root für die App. + DATABASE_URL: "mysql://${DB_USER}:${DB_PASSWORD}@db:3306/${DB_NAME}" JWT_SECRET: ${JWT_SECRET} JWT_EXPIRES_IN: ${JWT_EXPIRES_IN:-7d} ENCRYPTION_KEY: ${ENCRYPTION_KEY}