1. MySQL/MariaDB

概述

本节包含以安全方式设置 MySQL 数据库的最佳实践。

为了便于设置,建议遵循默认的 MySQL/MariaDB 创建数据库 说明, 其中包括创建对 Zabbix 数据库具有完全权限的“zabbix”用户。此用户是数据库所有者,在 升级 Zabbix 时还具有修改数据库结构所需的权限。

为了提高安全性,建议创建具有最小权限的其他数据库角色和用户。这些角色和用户应根据 最小权限原则 进行配置,即他们应仅具有执行预期功能所必需的权限。

创建用户角色

创建以下具有相应权限的角色:

  • zbx_srv - 运行 Zabbix 服务器和代理的角色:
  1. CREATE ROLE 'zbx_srv';
  2. GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_srv';
  3. FLUSH PRIVILEGES;
  • zbx_web - 运行 Zabbix 前端和 API 的角色:
  1. CREATE ROLE 'zbx_web';
  2. GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_web';
  3. FLUSH PRIVILEGES;
  • zbx_bckp - 表备份的角色:
  1. CREATE ROLE 'zbx_bckp';
  2. GRANT LOCK TABLES, TRIGGER, SELECT ON zabbix.* TO 'zbx_bckp';
  3. GRANT process ON *.* TO 'zbx_bckp';
  4. FLUSH PRIVILEGES;

表恢复应由数据库所有者执行。

  • zbx_part - 具有数据库分区的一组减少的权限的角色;

请注意,只能在创建数据库后创建此角色,因为它授予对特定数据库表的权限:

  1. CREATE ROLE 'zbx_part';
  2. GRANT SELECT, ALTER, DROP ON zabbix.history TO 'zbx_part';
  3. GRANT SELECT, ALTER, DROP ON zabbix.history_uint TO 'zbx_part';
  4. GRANT SELECT, ALTER, DROP ON zabbix.history_str TO 'zbx_part';
  5. GRANT SELECT, ALTER, DROP ON zabbix.history_text TO 'zbx_part';
  6. GRANT SELECT, ALTER, DROP ON zabbix.history_log TO 'zbx_part';
  7. GRANT SELECT, ALTER, DROP ON zabbix.trends TO 'zbx_part';
  8. GRANT SELECT, ALTER, DROP ON zabbix.trends_uint TO 'zbx_part';
  9. -- For MariaDB: skip the next line (GRANT session_variables_admin ON *.* TO 'zbx_part';)
  10. GRANT session_variables_admin ON *.* TO 'zbx_part';
  11. GRANT SELECT ON zabbix.dbversion TO 'zbx_part';
  12. GRANT SELECT, DELETE ON zabbix.housekeeper TO 'zbx_part';
  13. FLUSH PRIVILEGES;

创建角色后,可以将其分配给用户。

分配用户角色

要分配已创建的用户角色,请创建用户并为其分配相关角色。根据需要替换<user><host><role><password>

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

例如,创建并分配运行 Zabbix 服务器和代理的角色:

  1. CREATE USER 'usr_srv'@'localhost' IDENTIFIED BY 'password';
  2. GRANT 'zbx_srv' TO 'usr_srv'@'localhost';
  3. SET DEFAULT ROLE ALL TO 'usr_srv'@'localhost';
  4. FLUSH PRIVILEGES;