1 Proteger MySQL/MariaDB

Descripción general

Esta sección contiene las mejores prácticas para proteger una base de datos MySQL/MariaDB.

Para una configuración básica, consulte las instrucciones predeterminadas creación de base de datos MySQL/MariaDB, que incluyen la creación del usuario 'zabbix' con privilegios completos en la base de datos Zabbix. Este usuario es el propietario de la base de datos y también tiene los privilegios necesarios para modificar la estructura de la base de datos al actualizar Zabbix.

Para mejorar la seguridad, se recomienda crear roles de base de datos adicionales y usuarios con privilegios mínimos. Estos roles y usuarios deben configurarse según el principio de privilegio mínimo, es decir, sólo deben tener privilegios que sean esenciales para realizar las funciones previstas.

Crear roles de usuario

Cree los siguientes roles con los privilegios correspondientes:

  • zbx_srv - rol para ejecutar el servidor y el proxy Zabbix:
CREATE ROLE 'zbx_srv';
       GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_srv';
       FLUSH PRIVILEGES;
  • zbx_web - rol para ejecutar la interfaz y API de Zabbix:
CREATE ROLE 'zbx_web';
       GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_web';
       FLUSH PRIVILEGES;
  • zbx_bckp - rol para la copia de seguridad de la tabla:
CREATE ROLE 'zbx_bckp';
       GRANT LOCK TABLES, TRIGGER, SELECT ON zabbix.* TO 'zbx_bckp';
       GRANT process ON *.* TO 'zbx_bckp';
       FLUSH PRIVILEGES;

La restauración y actualización de la tabla debe ser realizada por el propietario de la base de datos.

  • zbx_part - rol con un conjunto reducido de privilegios para la partición de bases de datos; tenga en cuenta que este rol solo se puede crear después de que se haya creado la base de datos, ya que otorga privilegios en tablas específicas de la base de datos:
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';
       -- Para MariaDB: omita la siguiente línea (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;

Después de crear los roles, se pueden asignar a los usuarios.

Asignar roles de usuario

Para asignar los roles de usuario creados, cree usuarios y asígneles los roles relevantes. Reemplace <usuario>, <equipo>, <rol> y <contraseña> según sea necesario.

CREATE USER '<usuario>'@'<equipo>' IDENTIFIED BY '<contraseña>';
       GRANT '<rol>' TO '<usuario>'@'<equipo>';
       SET DEFAULT ROLE '<rol>' TO '<usuario>'@'<equipo>';
       -- Para MariaDB: SET DEFAULT ROLE '<rol>' FOR '<usuario>'@'<equipo>'
       FLUSH PRIVILEGES;

Por ejemplo, para crear y asignar la función para ejecutar el servidor y el proxy de 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;