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 de 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 essentiels à 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 l'exécution du serveur Zabbix et du proxy :
CREATE ROLE 'zbx_srv';
GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_srv';
FLUSH PRIVILEGES;
  • zbx_web - rôle pour l'exécution de l'interface Zabbix et de l'API :
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 et la mise à niveau des tables 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';
-- For MariaDB: skip the next line (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 avoir créé les 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 attribuez-leur les rôles appropriés. Remplacez <user>, <host>, <role> et <password> selon les 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 permettant d'exécuter le serveur Zabbix et le proxy :

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;