1 MySQL/MariaDB の保護

概要

このセクションでは、MySQL/MariaDB データベースを保護するためのベストプラクティスを説明します。

基本的なセットアップについては、デフォルトの MySQL/MariaDB データベース作成 の手順を参照してください。これには、Zabbix データベースに対するフル権限を持つ 'zabbix' ユーザーの作成が含まれます。 このユーザーはデータベース所有者であり、アップグレード 時にデータベース構造を変更するために必要な権限も持っています。

セキュリティを向上させるには、最小限の権限を持つ追加のデータベースロールとユーザーを作成することを推奨します。 これらのロールとユーザーは、最小権限の原則 に基づいて設定する必要があります。 つまり、想定される機能を実行するために不可欠な権限のみを持つべきです。

ユーザーロールの作成

次のロールを、それぞれ対応する権限で作成します。

  • zbx_srv - Zabbixサーバーおよびプロキシを実行するためのロール:
CREATE ROLE 'zbx_srv';
GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_srv';
FLUSH PRIVILEGES;
  • zbx_web - Zabbix Webインターフェースおよび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';
-- 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>';
-- 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;