MySQLのレプリケーション機能において、レプリカはソースから送信されたトランザクションをそのまま実行し、ソースと同じデータ状態を保つように設計されています。レプリケーションを設定する際には、REPLICATION SLAVE権限を持つアカウントがソースに存在する必要があります。このアカウントを使用して、レプリカはソースに接続し、レプリケーションを開始することができます。このプロセスでは、レプリカはソースから受け取ったトランザクションの権限のチェックをせずに適用します。
MySQL 8.
PRIVILEGE_CHECKS_USER アカウントの作成と設定
MySQL 8.CHANGE REPLICATION SOURCE TOまたはCHANGE MASTER TO)PRIVILEGE_アカウントを指定できます。
PRIVILEGE_アカウントにはユーザーアカウントを指定します。デフォルトはNULLであり、指定なしです。ソースから受け取ったトランザクションをレプリカが適用するときに、ここに指定されたユーザーアカウント権限と照合してチェックし、そのトランザクションの適用が認可されていることを確認します。
また、PRIVILEGE_アカウントを指定するときは、REQUIRE_オプションを1に指定することをおすすめします。これは行ベースレプリケーションのトランザクションのみを受けていれるようにするオプションです。ステートメントベースレプリケーションであると、トランザクションによっては管理者レベルの権限が必要になるときがあるためです。よりセキュアにするために、この指定を行います。
PRIVILEGE_CHECKS_USERアカウント設定例mysql> CHANGE REPLICATION SOURCE TO
PRIVILEGE_CHECKS_USER = 'repl_priv_user'@'%',
REQUIRE_ROW_FORMAT = 1;
PRIVILEGE_アカウントに指定するアカウントにはREPLICATION_権限が必要です。それと、予想されるすべてのトランザクションを適用するのに十分な追加の権限の付与を行います。
次の例では、前述の例でPRIVILEGE_アカウントに指定した'repl_ユーザアカウントに対して、REPLICATION_権限の付与とdb1データベースの全テーブルにINSERTできるように指定しています。
PRIVILEGE_CHECKS_USERアカウント作成例mysql> CREATE USER 'repl_priv_user'@'%' IDENTIFIED BY 'password'; mysql> GRANT REPLICATION_APPLIER 'repl_priv_user'@'%'; mysql> GRANT INSERT ON db1.* TO 'repl_priv_user'@'%';
以上の設定を行うと、db1データベースの全テーブルに対するINSERTのみレプリケーションされます。それ以外のトランザクションがくると、レプリケーションは停止するようになります。
PRIVILEGE_CHECKS_USER アカウントの用途
PRIVILEGE_アカウントの用途としては、以下の2つがあります。
- セキュリティの向上
- ヒューマンエラーからの保護
「セキュリティの向上」PRIVILEGE_アカウントに付与することで、不正な操作からレプリカを保護することができます。
「ヒューマンエラーからの保護」DROP権限を剥奪したPRIVILEGE_アカウントを用意します。ミスにより誤ってテーブルを削除したとしても、レプリカでは削除されず残ることになります。ただし、これは複雑な構成になり、イレギュラーな作業時にレプリケーション停止のリスクがあるため、実運用には適さないと考えます。このようなヒューマンエラーに対してはバックアップからリストアするのがいいでしょう。
失敗したトランザクションへの対応方法
PRIVILEGE_ アカウントに対する権限チェックが失敗した場合、トランザクションは実行されず、レプリケーションは停止します。
停止後に失敗したトランザクションを確認して対応方法を検討します。失敗したトランザクションの確認方法はmysqlbinlogコマンドを利用して、該当のトランザクションを特定します。
該当のトランザクションを特定し、それがセキュリティ上の問題がないことを確認します。問題ないことが確認できたら、以下のような対応方法があります。
- 適切な権限の付与:実行されるべきトランザクションであれば、
PRIVILEGE_アカウントに適切な権限を付与してレプリケーションを再開します。CHECKS_ USER - トランザクションのスキップ:一時的に予期していないトランザクションであり、無視してもよいものであればスキップします。スキップ方法はGTIDであれば、17.
1.7. 、GTIDでない場合は 17.3.1 GTID のあるトランザクションのスキップ 1.7. をご確認ください。3.2 GTID のないトランザクションのスキップ
まとめ
今回はレプリカのレプリケーション権限チェックについて紹介しました。17.