本节包含以安全方式设置 MySQL 数据库的最佳实践。
为了便于设置,建议遵循默认的 MySQL/MariaDB 创建数据库 说明, 其中包括创建对 Zabbix 数据库具有完全权限的“zabbix”用户。此用户是数据库所有者,在 升级 Zabbix 时还具有修改数据库结构所需的权限。
为了提高安全性,建议创建具有最小权限的其他数据库角色和用户。这些角色和用户应根据 最小权限原则 进行配置,即他们应仅具有执行预期功能所必需的权限。
创建以下具有相应权限的角色:
CREATE ROLE 'zbx_srv';
GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_srv';
FLUSH PRIVILEGES;
CREATE ROLE 'zbx_web';
GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_web';
FLUSH PRIVILEGES;
CREATE ROLE 'zbx_bckp';
GRANT LOCK TABLES, TRIGGER, SELECT ON zabbix.* TO 'zbx_bckp';
GRANT process ON *.* TO 'zbx_bckp';
FLUSH PRIVILEGES;
表恢复应由数据库所有者执行。
请注意,只能在创建数据库后创建此角色,因为它授予对特定数据库表的权限:
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;
创建角色后,可以将其分配给用户。
要分配已创建的用户角色,请创建用户并为其分配相关角色。根据需要替换<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 服务器和代理的角色: