MySQL 8.0 リファレンスマニュアル


5.1.9.1 システム変数権限

システム変数には、サーバー操作全体に影響するグローバル値、現在のセッションのみに影響するセッション値、またはその両方を指定できます:

  • 動的システム変数の場合、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_encryptionmandatory_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_formatsql_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 が直接付与されたアカウントに適用できます。


関連キーワード:  変数, 権限, サーバー, VARIABLES, ADMIN, 永続, 設定, セッション, 操作, グローバル