1 Защита MySQL/MariaDB

Обзор

В этом разделе содержатся рекомендации по обеспечению безопасности базы данных MySQL/MariaDB.

Для базовой настройки см. стандартные инструкции по созданию базы данных MySQL/MariaDB, которые включают создание пользователя 'zabbix' с полными привилегиями для базы данных Zabbix. Этот пользователь является владельцем базы данных и также имеет необходимые привилегии для изменения структуры базы данных при обновлении Zabbix.

Для повышения безопасности рекомендуется создавать дополнительные роли и пользователей базы данных с минимальными привилегиями. Эти роли и пользователи должны быть настроены в соответствии с принципом наименьших привилегий, то есть они должны иметь только те привилегии, которые необходимы для выполнения предполагаемых функций.

Создание ролей пользователей

Создайте следующие роли с соответствующими привилегиями:

  • zbx_srv - роль для запуска Zabbix сервера и прокси:
CREATE ROLE 'zbx_srv';
GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_srv';
FLUSH PRIVILEGES;
  • zbx_web - роль для запуска веб-интерфейса Zabbix и API:
CREATE ROLE 'zbx_web';
GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_web';
FLUSH PRIVILEGES;
  • zbx_bckp - роль для резервного копирования таблиц:
CREATE ROLE 'zbx_bckp';
GRANT LOCK TABLES, TRIGGER, SELECT ON zabbix.* TO 'zbx_bckp';
GRANT process ON *.* TO 'zbx_bckp';
FLUSH PRIVILEGES;

Восстановление таблиц и обновление должны выполняться владельцем базы данных.

  • zbx_part - роль с сокращенным набором привилегий для секционирования базы данных; обратите внимание, что эту роль можно создать только после создания базы данных, так как она предоставляет привилегии для определенных таблиц базы данных:
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';
-- Для MariaDB: пропустите следующую строку (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;

После создания ролей их можно назначить пользователям.

Назначение ролей пользователей

Чтобы назначить созданные роли пользователей, создайте пользователей и назначьте им соответствующие роли. При необходимости замените <user>, <host>, <role> и <password>.

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;

Например, чтобы создать и назначить роль для запуска сервера 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;