1 Protezione di MySQL/MariaDB

Panoramica

Questa sezione contiene le best practices per la protezione di un database MySQL/MariaDB.

Per una configurazione di base, consultare le istruzioni predefinite per la creazione del database MySQL/MariaDB, che includono la creazione dell'utente 'zabbix' con privilegi completi sul database Zabbix. Questo utente è il proprietario del database e dispone anche dei privilegi necessari per modificarne la struttura durante l'aggiornamento di Zabbix.

Per migliorare la sicurezza, si consiglia di creare ruoli e utenti aggiuntivi per il database con privilegi minimi. Questi ruoli e utenti devono essere configurati in base al principio del privilegio minimo, ovvero, devono disporre solo dei privilegi essenziali per l'esecuzione delle funzioni previste.

Creazione dei ruoli utente

Creare i seguenti ruoli con i privilegi corrispondenti:

  • zbx_srv - ruolo per eseguire Zabbix server e proxy:
CREATE ROLE 'zbx_srv';
GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_srv';
FLUSH PRIVILEGES;
  • zbx_web - ruolo per eseguire il frontend e l'API di Zabbix:
CREATE ROLE 'zbx_web';
GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_web';
FLUSH PRIVILEGES;
  • zbx_bckp - ruolo per il backup delle tabelle:
CREATE ROLE 'zbx_bckp';
GRANT LOCK TABLES, TRIGGER, SELECT ON zabbix.* TO 'zbx_bckp';
GRANT process ON *.* TO 'zbx_bckp';
FLUSH PRIVILEGES;

Il ripristino e l'aggiornamento delle tabelle devono essere eseguiti dal proprietario del database.

  • zbx_part - ruolo con un insieme ridotto di privilegi per il partizionamento del database; si noti che questo ruolo può essere creato solo dopo che il database è stato creato, poiché concede privilegi su tabelle specifiche del database:
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';
-- Per MariaDB: saltare la riga successiva (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;

Dopo aver creato i ruoli, questi possono essere assegnati agli utenti.

Assegnazione dei ruoli utente

Per assegnare i ruoli utente creati, creare gli utenti e assegnare loro i ruoli pertinenti. Sostituire <user>, <host>, <role> e <password> secondo necessità.

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

Ad esempio, per creare e assegnare il ruolo per l'esecuzione del server e del 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;