システム変数には、サーバー操作全体に影響するグローバル値、現在のセッションのみに影響するセッション値、またはその両方を指定できます:
動的システム変数の場合、
SET
ステートメントを使用してグローバルまたはセッションのランタイム値 (あるいはその両方) を変更し、現在のサーバーインスタンスの操作に影響を与えることができます。 (動的変数の詳細は、セクション5.1.9.2「動的システム変数」 を参照してください。)特定のグローバルシステム変数では、
SET
を使用してその値をデータディレクトリ内のmysqld-auto.cnf
ファイルに永続化し、後続の起動のためのサーバー操作に影響を与えることができます。 (システム変数およびmysqld-auto.cnf
ファイルの永続化の詳細は、セクション5.1.9.3「永続化されるシステム変数」 を参照してください。)永続化されたグローバルシステム変数の場合、
RESET PERSIST
を使用してその値をmysqld-auto.cnf
から削除し、後続の起動のサーバー操作に影響を与えることができます。
このセクションでは、実行時にシステム変数に値を割り当てる操作に必要な権限について説明します。 これには、ランタイム値に影響する操作と、値を永続化する操作が含まれます。
グローバルシステム変数を設定するには、適切なキーワードを指定した SET
ステートメントを使用します。 次の権限が適用されます:
グローバルシステム変数のランタイム値を設定するには、
SYSTEM_VARIABLES_ADMIN
権限 (または非推奨のSUPER
権限) を必要とするSET GLOBAL
ステートメントを使用します。グローバルシステム変数を
mysqld-auto.cnf
ファイルに永続化 (およびランタイム値を設定) するには、SYSTEM_VARIABLES_ADMIN
またはSUPER
権限を必要とするSET PERSIST
ステートメントを使用します。グローバルシステム変数を
mysqld-auto.cnf
ファイルに永続化するには (ランタイム値を設定せずに)、SYSTEM_VARIABLES_ADMIN
およびPERSIST_RO_VARIABLES_ADMIN
権限を必要とするSET PERSIST_ONLY
ステートメントを使用します。SET PERSIST_ONLY
は、動的システム変数と読取り専用システム変数の両方に使用できますが、SET PERSIST
を使用できない読取り専用変数を永続化する場合に特に便利です。一部のグローバルシステム変数は永続的に制限されます (セクション5.1.9.4「永続的で永続的に制限されないシステム変数」 を参照)。 これらの変数を永続化するには、前述の権限を必要とする
SET PERSIST_ONLY
ステートメントを使用します。 また、暗号化された接続を使用してサーバーに接続し、persist_only_admin_x509_subject
システム変数で指定されたサブジェクト値で SSL 証明書を指定する必要があります。
永続化されたグローバルシステム変数を mysqld-auto.cnf
ファイルから削除するには、RESET PERSIST
ステートメントを使用します。 次の権限が適用されます:
動的システム変数の場合、
RESET PERSIST
にはSYSTEM_VARIABLES_ADMIN
またはSUPER
権限が必要です。読取り専用システム変数の場合、
RESET PERSIST
にはSYSTEM_VARIABLES_ADMIN
およびPERSIST_RO_VARIABLES_ADMIN
権限が必要です。永続制限変数の場合、
RESET PERSIST
では、特定の SSL 証明書を使用して作成されたサーバーへの暗号化された接続は必要ありません。
グローバルシステム変数に前述の権限要件に対する例外がある場合、変数の説明にそれらの例外が示されます。 例として、追加の権限を必要とする default_table_encryption
や mandatory_roles
があります。 これらの追加権限は、グローバルランタイム値を設定する操作には適用されますが、値を永続化する操作には適用されません。
セッションシステム変数のランタイム値を設定するには、SET SESSION
ステートメントを使用します。 グローバルランタイム値の設定とは対照的に、セッションランタイム値の設定には通常、特別な権限は必要なく、すべてのユーザーが現在のセッションに影響を与えることができます。 一部のシステム変数では、セッション値を設定すると現在のセッションの外部に影響を与える可能性があるため、特殊な権限を持つユーザーのみが実行できる制限付き操作です:
-
MySQL 8.0.14 では、必要な権限は
SESSION_VARIABLES_ADMIN
です。注記SYSTEM_VARIABLES_ADMIN
またはSUPER
を持つユーザーは、効果的にSESSION_VARIABLES_ADMIN
を意味するため、SESSION_VARIABLES_ADMIN
を明示的に付与する必要はありません。 MySQL 8.0.14 より前は、必要な権限は
SYSTEM_VARIABLES_ADMIN
またはSUPER
です。
セッションシステム変数が制限されている場合、変数の説明にその制限が示されます。 たとえば、binlog_format
や sql_log_bin
などです。 これらの変数のセッション値を設定すると、現在のセッションのバイナリロギングに影響しますが、サーバーレプリケーションおよびバックアップの整合性にも大きな影響を与える可能性があります。
SESSION_VARIABLES_ADMIN
を使用すると、管理者は、制限付きセッションシステム変数を変更できるようにするために、以前に SYSTEM_VARIABLES_ADMIN
または SUPER
を付与されたユーザーの権限フットプリントを最小限に抑えることができます。 管理者が、制限付きセッションシステム変数を設定する機能を付与するために、次のロールを作成したとします:
CREATE ROLE set_session_sysvars;
GRANT SYSTEM_VARIABLES_ADMIN ON *.* TO set_session_sysvars;
set_session_sysvars
ロールを付与されたユーザー (およびそのロールがアクティブなユーザー) は、制限付きセッションシステム変数を設定できます。 ただし、そのユーザーはグローバルシステム変数を設定することもできますが、これは望ましくない場合があります。
SYSTEM_VARIABLES_ADMIN
のかわりに SESSION_VARIABLES_ADMIN
を使用するようにロールを変更することで、ロール権限を制限されたセッションシステム変数を設定する機能まで減らすことができます。 ロールを変更するには、次のステートメントを使用します:
GRANT SESSION_VARIABLES_ADMIN ON *.* TO set_session_sysvars;
REVOKE SYSTEM_VARIABLES_ADMIN ON *.* FROM set_session_sysvars;
ロールを変更するとすぐに有効になります: set_session_sysvars
ロールを付与されたアカウントには SYSTEM_VARIABLES_ADMIN
がなく、その権限が明示的に付与されないかぎりグローバルシステム変数を設定できません。 同様の GRANT
/REVOKE
順序は、ロールによってではなく、SYSTEM_VARIABLES_ADMIN
が直接付与されたアカウントに適用できます。