2024/
はじめに、MySQL 8.
- FLUSH_
PRIVILEGES権限 - OPTIMIZE_
LOCAL_ TABLE権限 - SET_
ANY_ DEFINER権限 - ALLOW_
NONEXISTENT_ DEFINER権限 - TRANSACTION_
GTID_ TAG権限
これらはすべて動的権限になります。それぞれの権限の内容と、それに基づく機能を説明します。
FLUSH_PRIVILEGES権限
FLUSH_FLUSH PRIVILEGES
ステートメントを実行するための権限です。MySQL 8.RELOAD
権限が必要でした。MySQL 8.RELOAD
権限は後方互換のためサポートされており、この権限を保持するユーザーはFLUSH PRIVILEGES
ステートメントの実行は可能です。RELOAD
権限はいくつかのオペレーションを可能するための権限であり、FLUSH PRIVILEGES
ステートメントの実行もその中の1つです。権限分離のために新たにFLUSH_
FLUSH PRIVILEGES
ステートメントは、mysqlシステムスキーマの権限テーブルFLUSH PRIVILEGES
ステートメントの実行の必要はなく、ステートメント完了すると変更が反映されます。
OPTIMIZE_LOCAL_TABLE権限
OPTIMIZE_OPTIMIZE LOCAL TABLE
およびOPTIMIZE NO_
ステートメントを実行するための権限です。
OPTIMIZE TABLE
ステートメントはテーブルデータやインデックスの断片化を解消するためにテーブルを再編成します。このステートメントはレプリケーションされるようにバイナリログに書き込まれます。OPTIMIZE LOCAL TABLE
およびOPTIMIZE NO_
ステートメントは、OPTIMIZE TABLE
ステートメントにNO_
SET_ANY_DEFINER権限とALLOW_NONEXISTENT_DEFINER権限
この2つの権限は、以下のデータベースオブジェクトを作成するステートメントに関連します。
CREATE PROCEDURE
ステートメントCREATE FUNCTION
ステートメントCREATE TRIGGER
ステートメントCREATE EVENT
ステートメントCREATE VIEW
ステートメント
これらのデータベースオブジェクトにはDEFINER
を設定する必要があり、それに影響します。
SET_ANY_DEFINER権限
この権限を持つユーザーアカウントは前述のデータベースオブジェクトに対して、任意のユーザーアカウントをDEFINERとして指定することが可能です。ただし、この権限を持たないユーザーアカウントでも、自身のユーザーアカウントをDEFINERとして指定することは可能です。
また、SYSTEM_
mysql> CREATE DEFINER='existent_user'@'%' VIEW b_view AS SELECT * FROM b; ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER or SET_ANY_DEFINER privilege(s) for this operation
mysql> CREATE DEFINER='existent_user'@'%' VIEW b_view AS SELECT * FROM b; Query OK, 0 rows affected, 0 warning (0.00 sec)
ALLOW_NONEXISTENT_DEFINER権限
デフォルトではセキュリティや操作ミスを防ぐために、孤立したデータベースオブジェクト
mysql> CREATE DEFINER='non_existent_user'@'%' VIEW b_view AS SELECT * FROM b; ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER or ALLOW_NONEXISTENT_DEFINER privilege(s) for this operation
mysql> CREATE DEFINER='non_existent_user'@'%' VIEW b_view AS SELECT * FROM b; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> show warnings; +-------+------+----------------------------------------------------------+ | Level | Code | Message | +-------+------+----------------------------------------------------------+ | Note | 1449 | The user specified as a definer ('non_existent_user'@'%') does not exist | +-------+------+----------------------------------------------------------+ 1 row in set (0.00 sec)
TRANSACTION_GTID_TAG権限
MySQL8.
GTIDにタグを付与するには、対象のユーザーアカウントにTRANSACTION_
まとめ
MySQL 8.
今回は以下の公式ドキュメントを参考に作成したので、より詳細を確認したい方はご参照ください。