fix(db): moindre privilege pour le user applicatif (drop GRANT ALL) (#24)
This commit is contained in:
parent
6653a7419d
commit
e62a9783b1
3 changed files with 34 additions and 2 deletions
25
db/init/10-scope-app-user.sh
Executable file
25
db/init/10-scope-app-user.sh
Executable file
|
|
@ -0,0 +1,25 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Wakdo - durcissement du privilege du user applicatif (moindre privilege).
|
||||||
|
#
|
||||||
|
# L'image mariadb cree MARIADB_USER avec GRANT ALL PRIVILEGES sur la base
|
||||||
|
# MARIADB_DATABASE. C'est trop large : le code applicatif expose (back-office)
|
||||||
|
# n'a besoin que de DML, jamais de DDL (CREATE/ALTER/DROP), de GRANT OPTION ni
|
||||||
|
# de DROP. Les migrations tournent separement en root (db/migrate.sh).
|
||||||
|
#
|
||||||
|
# Ce script s'execute UNIQUEMENT au premier demarrage sur volume vierge
|
||||||
|
# (/docker-entrypoint-initdb.d). Pour une base deja initialisee, appliquer le
|
||||||
|
# meme REVOKE/GRANT manuellement en root (voir db/init/README ou la PR).
|
||||||
|
#
|
||||||
|
# Set retenu : DML (SELECT/INSERT/UPDATE/DELETE) + ce dont mysqldump peut avoir
|
||||||
|
# besoin (SHOW VIEW, TRIGGER, LOCK TABLES). Pas de DDL, pas de GRANT, pas de DROP.
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
mariadb --protocol=socket -uroot -p"${MARIADB_ROOT_PASSWORD}" <<-EOSQL
|
||||||
|
REVOKE ALL PRIVILEGES ON \`${MARIADB_DATABASE}\`.* FROM '${MARIADB_USER}'@'%';
|
||||||
|
GRANT SELECT, INSERT, UPDATE, DELETE, SHOW VIEW, TRIGGER, LOCK TABLES
|
||||||
|
ON \`${MARIADB_DATABASE}\`.* TO '${MARIADB_USER}'@'%';
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
EOSQL
|
||||||
|
|
||||||
|
echo "[init] privilege du user '${MARIADB_USER}' restreint au moindre privilege sur '${MARIADB_DATABASE}'."
|
||||||
|
|
@ -93,6 +93,10 @@ services:
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
- wakdo_db_data:/var/lib/mysql
|
- wakdo_db_data:/var/lib/mysql
|
||||||
|
# Scripts d'init MariaDB, executes UNIQUEMENT au premier demarrage sur
|
||||||
|
# volume vierge : durcit le privilege du user applicatif (moindre
|
||||||
|
# privilege, db/init/10-scope-app-user.sh). Lecture seule.
|
||||||
|
- ./db/init:/docker-entrypoint-initdb.d:ro
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
- wakdo_internal
|
- wakdo_internal
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,11 @@
|
||||||
# - DB_USER (on utilise le user applicatif, pas root)
|
# - DB_USER (on utilise le user applicatif, pas root)
|
||||||
# - DB_PASSWORD
|
# - DB_PASSWORD
|
||||||
#
|
#
|
||||||
# Le USER applicatif doit avoir SELECT + LOCK TABLES + SHOW VIEW sur wakdo.
|
# Le USER applicatif a un privilege restreint (moindre privilege) : DML
|
||||||
# (GRANT donnes dans les migrations a venir en P2.)
|
# (SELECT/INSERT/UPDATE/DELETE) + SHOW VIEW, TRIGGER, LOCK TABLES sur wakdo,
|
||||||
|
# sans DDL ni GRANT OPTION. mysqldump --single-transaction (ci-dessous) n'exige
|
||||||
|
# que SELECT (+ SHOW VIEW/TRIGGER pour ces objets). Privileges poses par
|
||||||
|
# db/init/10-scope-app-user.sh (volume vierge) ou manuellement (base existante).
|
||||||
#
|
#
|
||||||
# Exit codes :
|
# Exit codes :
|
||||||
# 0 - backup OK
|
# 0 - backup OK
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue