1 Sécurisation de MySQL/MariaDB

Vue d'ensemble

Cette section contient les bonnes pratiques pour sécuriser une base de données MySQL/MariaDB.

Pour une configuration de base, consultez les instructions par défaut de création d'une base de données MySQL/MariaDB, qui incluent la création de l'utilisateur « zabbix » avec tous les privilèges sur la base de données Zabbix. Cet utilisateur est le propriétaire de la base de données et dispose également des privilèges nécessaires pour modifier la structure de la base de données lors de la mise à niveau de Zabbix.

Pour améliorer la sécurité, il est recommandé de créer des rôles et des utilisateurs de base de données supplémentaires avec des privilèges minimaux. Ces rôles et utilisateurs doivent être configurés selon le principe du moindre privilège, c'est-à-dire qu'ils ne doivent disposer que des privilèges strictement nécessaires à l'exécution des fonctions prévues.

Création des rôles utilisateur

Créez les rôles suivants avec les privilèges correspondants :

  • zbx_srv - rôle pour exécuter le serveur et le proxy Zabbix :
CREATE ROLE 'zbx_srv';
GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_srv';
FLUSH PRIVILEGES;
  • zbx_web - rôle pour exécuter le frontend et l’API Zabbix :
CREATE ROLE 'zbx_web';
GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_web';
FLUSH PRIVILEGES;
  • zbx_bckp - rôle pour la sauvegarde des tables :
CREATE ROLE 'zbx_bckp';
GRANT LOCK TABLES, TRIGGER, SELECT ON zabbix.* TO 'zbx_bckp';
GRANT process ON *.* TO 'zbx_bckp';
FLUSH PRIVILEGES;

La restauration des tables et la mise à niveau doivent être effectuées par le propriétaire de la base de données.

  • zbx_part - rôle avec un ensemble réduit de privilèges pour le partitionnement de la base de données ; notez que ce rôle ne peut être créé qu’après la création de la base de données, car il accorde des privilèges sur des tables spécifiques de la base de données :
CREATE ROLE 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.history TO 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.history_uint TO 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.history_str TO 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.history_text TO 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.history_log TO 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.trends TO 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.trends_uint TO 'zbx_part';
-- Pour MariaDB : ignorez la ligne suivante (GRANT session_variables_admin ON *.* TO 'zbx_part';)
GRANT session_variables_admin ON *.* TO 'zbx_part';
GRANT SELECT ON zabbix.dbversion TO 'zbx_part';
GRANT SELECT, DELETE ON zabbix.housekeeper TO 'zbx_part';
FLUSH PRIVILEGES;

Après la création des rôles, ils peuvent être attribués aux utilisateurs.

Attribution des rôles utilisateur

Pour attribuer les rôles utilisateur créés, créez des utilisateurs et assignez-leur les rôles correspondants. Remplacez <user>, <host>, <role> et <password> selon vos besoins.

CREATE USER '<user>'@'<host>' IDENTIFIED BY '<password>';
GRANT '<role>' TO '<user>'@'<host>';
SET DEFAULT ROLE '<role>' TO '<user>'@'<host>';
-- For MariaDB: SET DEFAULT ROLE '<role>' FOR '<user>'@'<host>'
FLUSH PRIVILEGES;

Par exemple, pour créer et attribuer le rôle destiné à l’exécution du serveur et du proxy Zabbix :

CREATE USER 'usr_srv'@'localhost' IDENTIFIED BY 'password';
GRANT 'zbx_srv' TO 'usr_srv'@'localhost';
SET DEFAULT ROLE ALL TO 'usr_srv'@'localhost';
FLUSH PRIVILEGES;