1 Protezione di MySQL/MariaDB
Panoramica
Questa sezione contiene le best practice per proteggere un database MySQL/MariaDB.
Per una configurazione di base, vedere 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 modificare la struttura del database durante l'aggiornamento di Zabbix.
Per migliorare la sicurezza, si consiglia di creare ulteriori ruoli e utenti del database con privilegi minimi. Questi ruoli e utenti devono essere configurati in base al principio del privilegio minimo, ossia devono avere solo i privilegi essenziali per svolgere le funzioni previste.
Creazione dei ruoli utente
Creare i seguenti ruoli con i relativi privilegi:
- zbx_srv - ruolo per l'esecuzione di Zabbix server e proxy:
CREATE ROLE 'zbx_srv';
GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_srv';
FLUSH PRIVILEGES;
- zbx_web - ruolo per l'esecuzione del frontend e dell'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 la creazione del database, 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';
-- 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;
Dopo aver creato i ruoli, questi possono essere assegnati agli utenti.
Assegnazione dei ruoli utente
Per assegnare i ruoli utente creati, crea gli utenti e assegna loro i ruoli pertinenti.
Sostituisci <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>';
-- For MariaDB: SET DEFAULT ROLE '<role>' FOR '<user>'@'<host>'
FLUSH PRIVILEGES;
Ad esempio, per creare e assegnare il ruolo per l'esecuzione di Zabbix server e 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;