1 Absicherung von MySQL/MariaDB

Übersicht

Dieser Abschnitt enthält bewährte Methoden zum Absichern einer MySQL/MariaDB-Datenbank.

Für eine grundlegende Einrichtung siehe die Standardanweisungen zur Erstellung der MySQL/MariaDB-Datenbank, die das Erstellen des Benutzers 'zabbix' mit vollständigen Berechtigungen für die Zabbix-Datenbank umfassen. Dieser Benutzer ist der Datenbankbesitzer und verfügt außerdem über die erforderlichen Berechtigungen zum Ändern der Datenbankstruktur beim Upgrade von Zabbix.

Um die Sicherheit zu verbessern, wird empfohlen, zusätzliche Datenbankrollen und Benutzer mit minimalen Berechtigungen zu erstellen. Diese Rollen und Benutzer sollten auf Grundlage des Prinzips der geringsten Berechtigung konfiguriert werden, das heißt, sie sollten nur über Berechtigungen verfügen, die für die Ausführung der vorgesehenen Funktionen unbedingt erforderlich sind.

Erstellen von Benutzerrollen

Erstellen Sie die folgenden Rollen mit den entsprechenden Berechtigungen:

  • zbx_srv - Rolle für den Betrieb von Zabbix Server und Proxy:
CREATE ROLE 'zbx_srv';
GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_srv';
FLUSH PRIVILEGES;
  • zbx_web - Rolle für den Betrieb von Zabbix Frontend und API:
CREATE ROLE 'zbx_web';
GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_web';
FLUSH PRIVILEGES;
  • zbx_bckp - Rolle für die Tabellensicherung:
CREATE ROLE 'zbx_bckp';
GRANT LOCK TABLES, TRIGGER, SELECT ON zabbix.* TO 'zbx_bckp';
GRANT process ON *.* TO 'zbx_bckp';
FLUSH PRIVILEGES;

Die Wiederherstellung und das Upgrade von Tabellen sollten vom Datenbankbesitzer durchgeführt werden.

  • zbx_part - Rolle mit einem reduzierten Satz von Berechtigungen für die Datenbankpartitionierung; beachten Sie, dass diese Rolle erst nach dem Erstellen der Datenbank angelegt werden kann, da sie Berechtigungen für bestimmte Datenbanktabellen vergibt:
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;

Nach dem Erstellen der Rollen können sie Benutzern zugewiesen werden.

Zuweisen von Benutzerrollen

Um die erstellten Benutzerrollen zuzuweisen, erstellen Sie Benutzer und weisen Sie ihnen die entsprechenden Rollen zu. Ersetzen Sie <user>, <host>, <role> und <password> nach Bedarf.

CREATE USER '<user>'@'<host>' IDENTIFIED BY '<password>';
GRANT '<role>' TO '<user>'@'<host>';
SET DEFAULT ROLE '<role>' TO '<user>'@'<host>';
-- Für MariaDB: SET DEFAULT ROLE '<role>' FOR '<user>'@'<host>'
FLUSH PRIVILEGES;

Um beispielsweise die Rolle für den Betrieb von Zabbix Server und Proxy zu erstellen und zuzuweisen:

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;