このページは機械翻訳したものです。
MySQL アカウントに付与される権限によって、アカウントが実行できる操作が決まります。 MySQL の権限は、適用されるコンテキストと操作のレベルによって異なります:
管理権限によって、ユーザーは MySQL サーバーの動作を管理できます。 これらの権限は特定のデータベースに固有でないため、グローバルです。
データベース権限は、データベースおよびデータベース内のすべてのオブジェクトに適用されます。 これらの権限は、特定のデータベースに付与したり、すべてのデータベースに適用されるようにグローバルに付与したりすることができます。
テーブル、インデックス、ビュー、ストアドルーチンなどのデータベースオブジェクトに対する権限は、データベース内の特定のオブジェクト、データベース内の特定のタイプのすべてのオブジェクト (データベース内のすべてのテーブルなど)、またはすべてのデータベース内の特定のタイプのすべてのオブジェクトに対してグローバルに付与できます。
権限は、静的 (サーバーに組み込まれている) か動的 (実行時に定義される) かによっても異なります。 権限が静的であるか動的であるかは、ユーザーアカウントおよびロールに付与される可用性に影響します。 静的権限と動的権限の違いの詳細は、静的権限と動的権限 を参照してください。)
アカウント権限に関する情報は、mysql システムデータベースの付与テーブルに格納されます。 これらのテーブルの構造および内容の説明は、セクション6.2.3「付与テーブル」 を参照してください。 MySQL サーバーは、起動時に付与テーブルの内容をメモリーに読み取り、セクション6.2.13「権限変更が有効化される時期」 に示されている状況下でそれらをリロードします。 サーバーは、付与テーブルのメモリー内コピーに基づいてアクセス制御の決定を行います。
一部の MySQL リリースでは、新しい権限または機能を追加するために付与テーブルに変更が導入されています。 新しい機能を確実に利用できるようにするには、MySQL をアップグレードするたびに付与テーブルを現在の構造に更新します。 セクション2.11「MySQL のアップグレード」を参照してください。
次の各セクションでは、使用可能な権限の概要、各権限の詳細な説明および使用上のガイドラインを示します。
次のテーブルに、GRANT および REVOKE ステートメントで使用される静的権限名と、付与テーブルの各権限に関連付けられたカラム名および権限が適用されるコンテキストを示します。
表 6.2 GRANT および REVOKE に許可される静的権限
| 権限 | 付与テーブルカラム | コンテキスト |
|---|---|---|
ALL [PRIVILEGES] |
「「すべての権限」」のシノニム | サーバー管理 |
ALTER |
Alter_priv |
テーブル |
ALTER ROUTINE |
Alter_routine_priv |
ストアドルーチン |
CREATE |
Create_priv |
データベース、テーブルまたはインデックス |
CREATE ROLE |
Create_role_priv |
サーバー管理 |
CREATE ROUTINE |
Create_routine_priv |
ストアドルーチン |
CREATE TABLESPACE |
Create_tablespace_priv |
サーバー管理 |
CREATE TEMPORARY TABLES |
Create_tmp_table_priv |
テーブル |
CREATE USER |
Create_user_priv |
サーバー管理 |
CREATE VIEW |
Create_view_priv |
ビュー |
DELETE |
Delete_priv |
テーブル |
DROP |
Drop_priv |
データベース、テーブルまたはビュー |
DROP ROLE |
Drop_role_priv |
サーバー管理 |
EVENT |
Event_priv |
データベース |
EXECUTE |
Execute_priv |
ストアドルーチン |
FILE |
File_priv |
サーバーホストでのファイルアクセス |
GRANT OPTION |
Grant_priv |
データベース、テーブル、またはストアドルーチン |
INDEX |
Index_priv |
テーブル |
INSERT |
Insert_priv |
テーブルまたはカラム |
LOCK TABLES |
Lock_tables_priv |
データベース |
PROCESS |
Process_priv |
サーバー管理 |
PROXY |
proxies_priv テーブルを参照 |
サーバー管理 |
REFERENCES |
References_priv |
データベースまたはテーブル |
RELOAD |
Reload_priv |
サーバー管理 |
REPLICATION CLIENT |
Repl_client_priv |
サーバー管理 |
REPLICATION SLAVE |
Repl_slave_priv |
サーバー管理 |
SELECT |
Select_priv |
テーブルまたはカラム |
SHOW DATABASES |
Show_db_priv |
サーバー管理 |
SHOW VIEW |
Show_view_priv |
ビュー |
SHUTDOWN |
Shutdown_priv |
サーバー管理 |
SUPER |
Super_priv |
サーバー管理 |
TRIGGER |
Trigger_priv |
テーブル |
UPDATE |
Update_priv |
テーブルまたはカラム |
USAGE |
「権限なし」のシノニムです | サーバー管理 |
次のテーブルに、GRANT および REVOKE ステートメントで使用される動的権限名と、その権限が適用されるコンテキストを示します。
表 6.3 GRANT および REVOKE に許可される動的権限
| 権限 | コンテキスト |
|---|---|
APPLICATION_PASSWORD_ADMIN |
デュアルパスワード管理 |
AUDIT_ADMIN |
監査ログの管理 |
BACKUP_ADMIN |
バックアップ管理 |
BINLOG_ADMIN |
バックアップとレプリケーションの管理 |
BINLOG_ENCRYPTION_ADMIN |
バックアップとレプリケーションの管理 |
CLONE_ADMIN |
クローン管理 |
CONNECTION_ADMIN |
サーバー管理 |
ENCRYPTION_KEY_ADMIN |
サーバー管理 |
FIREWALL_ADMIN |
ファイアウォール管理 |
FIREWALL_USER |
ファイアウォール管理 |
FLUSH_OPTIMIZER_COSTS |
サーバー管理 |
FLUSH_STATUS |
サーバー管理 |
FLUSH_TABLES |
サーバー管理 |
FLUSH_USER_RESOURCES |
サーバー管理 |
GROUP_REPLICATION_ADMIN |
レプリケーション管理 |
INNODB_REDO_LOG_ARCHIVE |
redo ログアーカイブ管理 |
NDB_STORED_USER |
NDB Cluster |
PERSIST_RO_VARIABLES_ADMIN |
サーバー管理 |
REPLICATION_APPLIER |
レプリケーションチャネル用の PRIVILEGE_CHECKS_USER
|
REPLICATION_SLAVE_ADMIN |
レプリケーション管理 |
RESOURCE_GROUP_ADMIN |
リソースグループ管理 |
RESOURCE_GROUP_USER |
リソースグループ管理 |
ROLE_ADMIN |
サーバー管理 |
SESSION_VARIABLES_ADMIN |
サーバー管理 |
SET_USER_ID |
サーバー管理 |
SHOW_ROUTINE |
サーバー管理 |
SYSTEM_USER |
サーバー管理 |
SYSTEM_VARIABLES_ADMIN |
サーバー管理 |
TABLE_ENCRYPTION_ADMIN |
サーバー管理 |
VERSION_TOKEN_ADMIN |
サーバー管理 |
XA_RECOVER_ADMIN |
サーバー管理 |
静的権限は、実行時に定義される動的権限とは対照的に、サーバーに組み込まれます。 次のリストでは、MySQL で使用可能な各静的権限について説明します。
特定の SQL ステートメントには、ここに示されているよりも具体的な権限要件がある場合もあります。 そのような場合、該当するステートメントの説明で詳細を示します。
-
これらの権限指定子は、「「特定の権限レベルで使用可能なすべての権限」」 (
GRANT OPTIONを除く) の短縮形です。 たとえば、グローバルレベルまたはテーブルレベルでALLを付与すると、すべてのグローバル権限またはすべてのテーブルレベル権限がそれぞれ付与されます。 -
ALTER TABLEステートメントを使用してテーブルの構造を変更できます。ALTER TABLEにはCREATEおよびINSERT権限も必要です。 テーブルの名前を変更するには、古いテーブルでALTERおよびDROPを、新しいテーブルでCREATEおよびINSERTを実行する必要があります。 -
ストアドルーチン (ストアドプロシージャーおよびストアドファンクション) を変更または削除するステートメントの使用を有効にします。 権限が付与されるスコープ内にあり、ユーザーがルーチン
DEFINERとして指定されたユーザーではないルーチンの場合、ルーチン定義以外のルーチンプロパティーへのアクセスも有効になります。 -
新しいデータベースおよびテーブルを作成するステートメントの使用を有効にします。
-
CREATE ROLEステートメントの使用を有効にします。 (CREATE USER権限により、CREATE ROLEステートメントの使用も可能になります。) セクション6.2.10「ロールの使用」を参照してください。CREATE ROLEおよびDROP ROLE権限は、アカウントの作成および削除にのみ使用できるため、CREATE USERほど強力ではありません。 これらは、CREATE USERでアカウント属性を変更したり、アカウントの名前を変更できるため、使用できません。 ユーザーとロールの互換性を参照してください。 -
ストアドルーチン (ストアドプロシージャーとストアドファンクション) を作成するステートメントの使用を有効にします。 権限が付与されるスコープ内にあり、ユーザーがルーチン
DEFINERとして指定されたユーザーではないルーチンの場合、ルーチン定義以外のルーチンプロパティーへのアクセスも有効になります。 -
テーブルスペースおよびログファイルグループを作成、変更または削除するステートメントを使用可能にします。
-
CREATE TEMPORARY TABLEステートメントを使用した一時テーブルの作成を有効にします。セッションが一時テーブルを作成したあと、サーバーはそのテーブルに対するそれ以上の権限チェックを実行しません。 セッションの作成によって、
DROP TABLE、INSERT、UPDATE、SELECTなどのあらゆる操作をテーブル上で実行できます。 詳細は、セクション13.1.20.2「CREATE TEMPORARY TABLE ステートメント」を参照してください。 -
ALTER USER,CREATE ROLE,CREATE USER,DROP ROLE,DROP USER,RENAME USERおよびREVOKE ALL PRIVILEGESステートメントの使用を有効にします。 -
CREATE VIEWステートメントの使用を有効にします。 -
データベース内のテーブルから行を削除できます。
-
既存のデータベース、テーブルおよびビューを削除するステートメントを使用可能にします。 パーティションテーブルで
ALTER TABLE ... DROP PARTITIONステートメントを使用するには、DROP権限が必要です。DROP権限はTRUNCATE TABLEのためにも必要です。 -
DROP ROLEステートメントの使用を有効にします。 (CREATE USER権限により、DROP ROLEステートメントの使用も可能になります。) セクション6.2.10「ロールの使用」を参照してください。CREATE ROLEおよびDROP ROLE権限は、アカウントの作成および削除にのみ使用できるため、CREATE USERほど強力ではありません。 これらは、CREATE USERでアカウント属性を変更したり、アカウントの名前を変更できるため、使用できません。 ユーザーとロールの互換性を参照してください。 -
イベントスケジューラのイベントを作成、変更、削除、または表示するステートメントの使用を有効にします。
-
ストアドルーチン (ストアドプロシージャーとストアドファンクション) を実行するステートメントの使用を有効にします。 権限が付与されるスコープ内にあり、ユーザーがルーチン
DEFINERとして指定されたユーザーではないルーチンの場合、ルーチン定義以外のルーチンプロパティーへのアクセスも有効になります。 -
次の操作およびサーバーの動作に影響します:
LOAD DATAおよびSELECT ... INTO OUTFILEステートメントとLOAD_FILE()関数を使用して、サーバーホスト上のファイルの読取りおよび書込みを有効にします。FILE権限を持つユーザーは、すべてのユーザーから読み取り可能であるか、MySQL サーバーによって読み取り可能なサーバーホスト上のすべてのファイルを読み取ることができます。 (このことは暗黙的に、データベースディレクトリ内のあらゆるファイルにサーバーからアクセスできるため、ユーザーはそれらのすべてのファイルを読み取ることができることを意味します。)MySQL サーバーが書込みアクセス権を持つ任意のディレクトリに新しいファイルを作成できます。 これは、権限テーブルを実装するファイルを格納するサーバーのデータディレクトリを含みます。
CREATE TABLEステートメントにDATA DIRECTORYまたはINDEX DIRECTORYテーブルオプションを使用できるようにします。
セキュリティ対策として、サーバーは既存のファイルを上書きしません。
ファイルの読取りおよび書込みが可能な場所を制限するには、
secure_file_privシステム変数を特定のディレクトリに設定します。 セクション5.1.8「サーバーシステム変数」を参照してください。 -
自分が所有する権限を他のユーザーに付与したり、他のユーザーから取り消すことができます。
-
インデックスを作成または削除するステートメントの使用を有効にします。
INDEXは既存のテーブルに適用されます。 テーブルに対するCREATE権限を持つ場合、CREATE TABLEステートメントにインデックス定義を含めることも可能です。 -
データベースのテーブルに行を挿入できます。
ANALYZE TABLE、OPTIMIZE TABLE、REPAIR TABLEなどのテーブル保守に関するステートメントにも、INSERT権限が必要です。 -
明示的な
LOCK TABLESステートメントを使用して、SELECT権限を持つテーブルをロックできます。 これには、他のセッションによるロックされたテーブルの読取りを防止する書込みロックの使用が含まれます。 -
PROCESS権限は、サーバー内で実行されているスレッドに関する情報 (セッションによって実行されているステートメントに関する情報) へのアクセスを制御します。SHOW PROCESSLISTステートメント、mysqladmin processlist コマンド、INFORMATION_SCHEMA.PROCESSLISTテーブル、およびパフォーマンススキーマprocesslistテーブルを使用して使用可能なスレッド情報には、次のようにアクセスできます:PROCESS権限を持つユーザーは、他のユーザーに属するスレッドも含め、すべてのスレッドに関する情報にアクセスできます。PROCESS権限がない場合、非匿名ユーザーは自分のスレッドに関する情報にアクセスできますが、他のユーザーのスレッドにはアクセスできません。また、匿名ユーザーはスレッド情報にアクセスできません。
注記パフォーマンススキーマ
threadsテーブルはスレッド情報も提供しますが、テーブルアクセスは別の特権モデルを使用します。 セクション27.12.19.10「スレッドテーブル」を参照してください。PROCESS権限では、SHOW ENGINEステートメントの使用、INFORMATION_SCHEMAInnoDBテーブル (INNODB_で始まる名前を持つテーブル) へのアクセスおよび、(MySQL 8.0.21 の時点で)INFORMATION_SCHEMAFILESテーブルへのアクセスも可能です。 -
あるユーザーが別のユーザーになりすましたり、別のユーザーとして知られるようにします。 セクション6.2.18「プロキシユーザー」を参照してください。
-
外部キー制約を作成するには、親テーブルに対する
REFERENCES権限が必要です。 -
RELOADでは、次の操作が可能です:FLUSHステートメントの使用。-
FLUSH操作と同等の mysqladmin コマンドの使用:flush-hosts,flush-logs,flush-privileges,flush-status,flush-tables,flush-threads,refreshおよびreload。reloadコマンドは、付与テーブルをメモリーにリロードするようにサーバーに指示します。flush-privilegesはreloadのシノニムです。refreshコマンドは、ログファイルを閉じて再オープンし、すべてのテーブルをフラッシュします。 ほかのflush-コマンドはxxxrefreshに類似した機能を実行しますが、より具体的であるため一部の状況では好ましい場合があります。 たとえば、ログファイルだけをフラッシュするときは、refreshよりもflush-logsを選択することをお勧めします。 様々な
FLUSH操作を実行する mysqldump オプションの使用:--flush-logsおよび--master-data。RESET MASTERおよびRESET REPLICA | SLAVEステートメントの使用。
-
SHOW MASTER STATUS、SHOW REPLICA | SLAVE STATUSおよびSHOW BINARY LOGSステートメントの使用を有効にします。 レプリカがレプリケーションソースサーバーとして現在のサーバーに接続するために使用するアカウントにこの権限を付与します。 -
SHOW REPLICAS | SHOW SLAVE HOSTS、SHOW RELAYLOG EVENTSおよびSHOW BINLOG EVENTSステートメントを使用して、レプリケーションソースサーバー上のデータベースに対して行われた更新をアカウントがリクエストできるようにします。 この権限は、mysqlbinlog オプションの--read-from-remote-server(-R) および--read-from-remote-masterを使用する場合にも必要です。 レプリカがレプリケーションソースサーバーとして現在のサーバーに接続するために使用するアカウントにこの権限を付与します。 -
データベース内のテーブルから行を選択できます。
SELECTステートメントには、実際にテーブルにアクセスする場合にのみSELECT権限が必要です。 一部のSELECTステートメントはテーブルにアクセスしないため、あらゆるデータベースへのアクセス権がなくても実行できます。 たとえば、テーブルを参照しない式を評価するための単純な計算機としてSELECTを使用することができます。SELECT 1+1; SELECT PI()*2;SELECT権限は、カラム値を読み取るほかのステートメントについても必要です。 たとえば、UPDATEステートメントの代入col_name=exprの右辺で参照されるカラムや、DELETEまたはUPDATEステートメントのWHERE句で指定されるカラムについて、SELECTが必要です。EXPLAINで使用されるテーブルまたはビュー (ビュー定義の基礎となるテーブルを含む) には、SELECT権限が必要です。 -
SHOW DATABASEステートメントを発行して、アカウントがデータベース名を表示できるようにします。 この権限を持たないアカウントには、アカウントが一部の権限を持つデータベースしか表示されず、サーバーが--skip-show-databaseオプションで起動されている場合はステートメントを一切使用できません。注意静的グローバル権限はすべてのデータベースに対する権限とみなされるため、静的グローバル権限を使用すると、ユーザーは、部分的な取消しによってデータベースレベルで制限されているデータベースを除き、
SHOW DATABASESを使用するか、INFORMATION_SCHEMAのSCHEMATAテーブルを調べることで、すべてのデータベース名を表示できます。 -
SHOW CREATE VIEWステートメントの使用を有効にします。 この権限は、EXPLAINで使用されるビューにも必要です。 -
SHUTDOWNおよびRESTARTステートメント、mysqladmin shutdown コマンドおよびmysql_shutdown()C API 関数の使用を有効にします。 -
SUPERは強力で遠いリカバリ権限であるため、軽く付与しないでください。 アカウントでSUPER操作のサブセットのみを実行する必要がある場合は、かわりに 1 つ以上の動的権限を付与することで、必要な権限セットを実現できる場合があり、それぞれがより制限された機能を構成します。 動的権限の説明を参照してください。注記SUPERは非推奨であり、将来のバージョンの MySQL で削除される予定です。 SUPER から動的権限へのアカウントの移行を参照してください。SUPERは、次の操作およびサーバーの動作に影響します:-
実行時のシステム変数の変更を有効にします:
-
SET GLOBALおよびSET PERSISTを使用して、グローバルシステム変数に対するサーバー構成の変更を有効にします。対応する動的権限は
SYSTEM_VARIABLES_ADMINです。 -
特別な権限を必要とする制限付きセッションシステム変数の設定を有効にします。
対応する動的権限は
SESSION_VARIABLES_ADMINです。
セクション5.1.9.1「システム変数権限」も参照してください。
-
-
グローバルトランザクション特性の変更を有効にします (セクション13.3.7「SET TRANSACTION ステートメント」 を参照)。
対応する動的権限は
SYSTEM_VARIABLES_ADMINです。 -
グループレプリケーションを含む、レプリケーションを開始および停止するアカウントを有効にします。
対応する動的権限は、通常のレプリケーションの場合は
REPLICATION_SLAVE_ADMIN、グループレプリケーションの場合はGROUP_REPLICATION_ADMINです。 -
(MySQL 8.0.23 の)
CHANGE REPLICATION SOURCE TOステートメント、(MySQL 8.0.23 の前の)CHANGE MASTER TOステートメントおよびCHANGE REPLICATION FILTERステートメントを使用できます。対応する動的権限は
REPLICATION_SLAVE_ADMINです。 -
PURGE BINARY LOGSおよびBINLOGステートメントを使用してバイナリログ制御を有効にします。対応する動的権限は
BINLOG_ADMINです。 -
ビューまたはストアドプログラムの実行時に有効な承認 ID を設定できるようにします。 この権限を持つユーザーは、ビューまたはストアドプログラムの
DEFINER属性で任意のアカウントを指定できます。対応する動的権限は
SET_USER_IDです。 CREATE SERVER、ALTER SERVERおよびDROP SERVERステートメントの使用を有効にします。mysqladmin debug コマンドの使用を有効にします。
-
InnoDB暗号化キーのローテーションを有効にします。対応する動的権限は
ENCRYPTION_KEY_ADMINです。 -
バージョントークンのユーザー定義関数の実行を有効にします。
対応する動的権限は
VERSION_TOKEN_ADMINです。 -
ロールの付与と取消し、
GRANTステートメントのWITH ADMIN OPTION句の使用、およびROLES_GRAPHML()関数からの結果の空でない<graphml>要素コンテンツを有効にします。対応する動的権限は
ROLE_ADMINです。 -
SUPER以外のアカウントに対して許可されていないクライアント接続の制御を有効にします:KILLステートメントまたは mysqladmin kill コマンドを使用して、他のアカウントに属するスレッドを強制終了できます。 (アカウントは常に独自のスレッドを強制終了できます。)サーバーは、
SUPERクライアントの接続時にinit_connectシステム変数の内容を実行しません。サーバーは、
max_connectionsシステム変数で構成された接続制限に達した場合でも、SUPERクライアントからの接続を受け入れます。オフラインモード (
offline_modeが有効) のサーバーは、次のクライアントリクエスト時にSUPERクライアント接続を終了せず、SUPERクライアントからの新しい接続を受け入れます。read_onlyシステム変数が有効な場合でも、更新を実行できます。 これは、明示的なテーブル更新、およびテーブルを暗黙的に更新するGRANTやREVOKEなどのアカウント管理ステートメントの使用に適用されます。
前述の接続制御操作に対応する動的権限は、
CONNECTION_ADMINです。
セクション25.7「ストアドプログラムバイナリロギング」 で説明されているように、バイナリロギングが有効になっている場合は、ストアドファンクションを作成または変更するために
SUPER権限が必要になることもあります。 -
-
トリガー操作を有効にします。 テーブルのトリガーを作成、削除、実行または表示するには、そのテーブルに対するこの権限が必要です。
トリガーが (トリガーに関連付けられたテーブルに対して
INSERT、UPDATEまたはDELETEステートメントを実行する権限を持つユーザーによって) アクティブ化された場合、トリガーの実行には、トリガーを定義したユーザーがそのテーブルに対するTRIGGER権限を持っている必要があります。 -
データベース内のテーブルで行を更新できます。
-
この権限指定子は、「「権限なし」」を表します。
GRANTでグローバルレベルで使用され、権限リスト内の特定のアカウント権限に名前を付けずにWITH GRANT OPTIONなどの句を指定します。SHOW GRANTSには、アカウントに権限レベルの権限がないことを示すUSAGEが表示されます。
サーバーに組み込まれている静的権限とは対照的に、動的権限は実行時に定義されます。 次のリストでは、MySQL で使用可能な各動的権限について説明します。
ほとんどの動的権限は、サーバーの起動時に定義されます。 その他は、権限の説明に示されているように、特定のコンポーネントまたはプラグインによって定義されます。 このような場合、権限を定義するコンポーネントまたはプラグインが有効になっていないかぎり、権限は使用できません。
特定の SQL ステートメントには、ここに示されているよりも具体的な権限要件がある場合もあります。 そのような場合、該当するステートメントの説明で詳細を示します。
-
APPLICATION_PASSWORD_ADMIN(MySQL 8.0.14 で追加)デュアルパスワード機能の場合、この権限により、自分のアカウントに適用される
ALTER USERステートメントおよびSET PASSWORDステートメントにRETAIN CURRENT PASSWORD句およびDISCARD OLD PASSWORD句を使用できます。 ほとんどのユーザーは 1 つのパスワードのみを必要とするため、自分のセカンダリパスワードを操作するにはこの権限が必要です。アカウントがすべてのアカウントのセカンダリパスワードの操作を許可される場合は、
APPLICATION_PASSWORD_ADMINではなくCREATE USER権限を付与する必要があります。デュアルパスワードの使用の詳細は、セクション6.2.15「パスワード管理」 を参照してください。
-
監査ログ構成を有効にします。 この権限は、
audit_logプラグインによって定義されます。セクション6.4.5「MySQL Enterprise Audit」 を参照してください。 -
LOCK INSTANCE FOR BACKUPステートメントの実行およびパフォーマンススキーマlog_statusテーブルへのアクセスを有効にします。注記BACKUP_ADMINの他に、log_statusテーブルに対するSELECT権限もアクセスに必要です。以前のバージョンから MySQL 8.0 へのインプレースアップグレードを実行すると、
RELOAD権限を持つユーザーにBACKUP_ADMIN権限が自動的に付与されます。 -
PURGE BINARY LOGSおよびBINLOGステートメントを使用してバイナリログ制御を有効にします。 -
バイナリログファイルおよびリレーログファイルの暗号化をアクティブまたは非アクティブにするシステム変数
binlog_encryptionの設定を有効にします。 この機能は、BINLOG_ADMIN、SYSTEM_VARIABLES_ADMINまたはSESSION_VARIABLES_ADMIN権限では提供されません。 サーバーの再起動時にバイナリログマスターキーを自動的にローテーションする関連システム変数binlog_rotate_encryption_master_key_at_startupには、この権限は必要ありません。 -
CLONEステートメントの実行を有効にします。BACKUP_ADMINおよびSHUTDOWN権限が含まれます。 -
KILLステートメントまたは mysqladmin kill コマンドを使用して、他のアカウントに属するスレッドを強制終了できます。 (アカウントは常に独自のスレッドを強制終了できます。)クライアント接続に関連するシステム変数の設定、またはクライアント接続に関連する制限の回避を有効にします。
CONNECTION_ADMINは、次のシステム変数の影響に適用されます:init_connect: サーバーは、CONNECTION_ADMINクライアントの接続時にinit_connectシステム変数の内容を実行しません。max_connections: サーバーは、max_connectionsシステム変数で構成された接続制限に達した場合でも、CONNECTION_ADMINクライアントからの接続を受け入れます。offline_mode: オフラインモード (offline_modeが有効) のサーバーは、次のクライアントリクエスト時にCONNECTION_ADMINクライアント接続を終了せず、CONNECTION_ADMINクライアントからの新しい接続を受け入れます。read_only:read_onlyシステム変数が有効な場合でも、更新を実行できます。 これは、明示的なテーブル更新、およびテーブルを暗黙的に更新するGRANTやREVOKEなどのアカウント管理ステートメントの使用に適用されます。
-
InnoDB暗号化キーのローテーションを有効にします。 -
ユーザーは、任意のユーザーのファイアウォールルールを管理できます。 この権限は、
MYSQL_FIREWALLプラグインによって定義されます。セクション6.4.7「MySQL Enterprise Firewall」 を参照してください。 -
ユーザーが独自のファイアウォールルールを更新できるようにします。 この権限は、
MYSQL_FIREWALLプラグインによって定義されます。セクション6.4.7「MySQL Enterprise Firewall」 を参照してください。 -
FLUSH_OPTIMIZER_COSTS(MySQL 8.0.23 で追加)FLUSH OPTIMIZER_COSTSステートメントの使用を有効にします。 -
FLUSH_STATUS(MySQL 8.0.23 で追加)FLUSH STATUSステートメントの使用を有効にします。 -
FLUSH_TABLES(MySQL 8.0.23 で追加)FLUSH TABLESステートメントの使用を有効にします。 -
FLUSH_USER_RESOURCES(MySQL 8.0.23 で追加)FLUSH USER_RESOURCESステートメントの使用を有効にします。 -
START GROUP REPLICATIONおよびSTOP GROUP REPLICATIONステートメントを使用してグループレプリケーションを開始および停止し、group_replication_consistencyシステム変数のグローバル設定を変更し、group_replication_set_write_concurrency()およびgroup_replication_set_communication_protocol()UDF を使用できるようにします。 レプリケーショングループのメンバーであるサーバーの管理に使用されるアカウントにこの権限を付与します。 -
アカウントが redo ログアーカイブをアクティブ化および非アクティブ化できるようにします。
-
ALTER INSTANCE {ENABLE|DISABLE} INNODB REDO_LOGステートメントを使用して redo ロギングを有効または無効にします。 MySQL 8.0.21 で導入されました。redo ロギングの無効化を参照してください。
-
特定の NDB Cluster に参加するとすぐに、ユーザーまたは役割とその権限をすべての
NDB対応 MySQL サーバー間で共有および同期できるようにします。 この権限は、NDBストレージエンジンが有効になっている場合にのみ使用できます。指定されたユーザーまたはロールに対して行われた権限の変更または取消しは、接続されているすべての MySQL サーバー (SQL ノード) とただちに同期化されます。 異なる SQL ノードから発生した権限に影響する複数のステートメントが、すべての SQL ノードで同じ順序で実行されることは保証されないことに注意してください。 このため、すべてのユーザー管理は単一の指定された SQL ノードから実行することを強くお薦めします。
NDB_STORED_USERはグローバル権限であり、ON *.*を使用して付与または取り消す必要があります。 この権限に他のスコープを設定しようとすると、エラーになります。 この権限は、ほとんどのアプリケーションユーザーおよび管理ユーザーに付与できますが、mysql.session@localhostやmysql.infoschema@localhostなどのシステム予約アカウントには付与できません。NDB_STORED_USER権限を付与されたユーザーは、この権限を持つロールと同様に、NDBに格納されます (したがって、すべての SQL ノードで共有されます)。NDB_STORED_USERを持つロールのみを付与されたユーザーは、NDBには格納されません。各NDB格納ユーザーには、権限を明示的に付与する必要があります。NDBでのこの動作の詳細は、セクション23.5.12「NDB_STORED_USER での分散 MySQL 権限」 を参照してください。NDB_STORED_USER権限は NDB 8.0.18 以降で使用できます。 -
SYSTEM_VARIABLES_ADMINも持っているユーザーの場合、PERSIST_RO_VARIABLES_ADMINを使用すると、SET PERSIST_ONLYを使用してグローバルシステム変数をデータディレクトリのmysqld-auto.cnfオプションファイルに永続化できます。 このステートメントはSET PERSISTと似ていますが、ランタイムグローバルシステム変数の値は変更されません。 これにより、SET PERSIST_ONLYは、サーバーの起動時にのみ設定できる読取り専用システム変数の構成に適しています。セクション5.1.9.1「システム変数権限」も参照してください。
-
アカウントをレプリケーションチャネルの
PRIVILEGE_CHECKS_USERとして機能させ、mysqlbinlog 出力でBINLOGステートメントを実行できるようにします。CHANGE REPLICATION SOURCE TO(MySQL 8.0.23 から) またはCHANGE MASTER TO(MySQL 8.0.23 より前) を使用して割り当てられたアカウントにこの権限を付与して、レプリケーションチャネルのセキュリティコンテキストを提供し、それらのチャネルでレプリケーションエラーを処理します。REPLICATION_APPLIER権限と同様に、レプリケーションチャネルで受信したトランザクションまたは mysqlbinlog 出力に含まれるトランザクションを実行するために必要な権限をアカウントに付与して、影響を受けるテーブルを更新する必要があります。 詳細は、セクション17.3.3「レプリケーション権限チェック」を参照してください。 -
アカウントがレプリケーションソースサーバーに接続し、
START REPLICA | SLAVEおよびSTOP REPLICA | SLAVEステートメントを使用してレプリケーションを開始および停止し、CHANGE REPLICATION SOURCE TOステートメント (MySQL 8.0.23 から) またはCHANGE MASTER TOステートメント (MySQL 8.0.23 より前) およびCHANGE REPLICATION FILTERステートメントを使用します。 レプリカがレプリケーションソースサーバーとして現在のサーバーに接続するために使用するアカウントにこの権限を付与します。 この権限はグループレプリケーションには適用されません。そのためにはGROUP_REPLICATION_ADMINを使用します。 -
リソースグループの作成、変更および削除、およびリソースグループへのスレッドとステートメントの割当てで構成されるリソースグループ管理を有効にします。 この権限を持つユーザーは、リソースグループに関連する操作を実行できます。
-
リソースグループへのスレッドとステートメントの割り当てを有効にします。 この権限を持つユーザーは、
SET RESOURCE GROUPステートメントおよびRESOURCE_GROUPオプティマイザヒントを使用できます。 -
ロールの付与と取消し、
GRANTステートメントのWITH ADMIN OPTION句の使用、およびROLES_GRAPHML()関数からの結果の空でない<graphml>要素コンテンツを有効にします。mandatory_rolesシステム変数の値を設定するために必要です。 -
管理接続のみを許可するネットワークインタフェースへの接続を有効にします (セクション5.1.12.1「接続インタフェース」 を参照)。
-
SESSION_VARIABLES_ADMIN(MySQL 8.0.14 で追加)ほとんどのシステム変数では、セッション値の設定に特別な権限は必要なく、すべてのユーザーが現在のセッションに影響を与えることができます。 一部のシステム変数では、セッション値を設定すると、現在のセッションの外部に影響を与える可能性があるため、操作が制限されます。 これらの場合、
SESSION_VARIABLES_ADMIN権限により、ユーザーはセッション値を設定できます。システム変数が制限されていて、セッション値を設定するために特別な権限が必要な場合、変数の説明にその制限が示されます。 例として、
binlog_format、sql_log_binおよびsql_log_offがあります。SESSION_VARIABLES_ADMINが追加された MySQL 8.0.14 より前は、SYSTEM_VARIABLES_ADMINまたはSUPER権限を持つユーザーのみが制限付きセッションシステム変数を設定できます。SESSION_VARIABLES_ADMIN権限は、SYSTEM_VARIABLES_ADMINおよびSUPER権限のサブセットです。 これらの権限のいずれかを持つユーザーは、制限付きセッション変数の設定も許可され、効果的にはSESSION_VARIABLES_ADMINを意味するため、SESSION_VARIABLES_ADMINを明示的に付与する必要はありません。セクション5.1.9.1「システム変数権限」も参照してください。
-
ビューまたはストアドプログラムの実行時に有効な承認 ID を設定できるようにします。 この権限を持つユーザーは、ビューまたはストアドプログラムの
DEFINER属性として任意のアカウントを指定できます。MySQL 8.0.22 では、
SET_USER_IDを使用して、(おそらく誤って) ストアドオブジェクトが孤立したり、現在孤立しているストアドオブジェクトを採用する原因となる操作を防ぐために設計されたセキュリティチェックをオーバーライドすることもできます。 詳細は、孤立したストアドオブジェクトを参照してください。 -
SHOW_ROUTINE(MySQL 8.0.20 で追加)ユーザーがルーチン
DEFINERとして指定されていないストアドルーチン (ストアドプロシージャーおよびストアドファンクション) の定義およびプロパティーにアクセスできるようにします。 このアクセスには、次のものが含まれます:INFORMATION_SCHEMA.ROUTINESテーブルの内容。SHOW CREATE FUNCTIONおよびSHOW CREATE PROCEDUREステートメント。SHOW FUNCTION CODEおよびSHOW PROCEDURE CODEステートメント。SHOW FUNCTION STATUSおよびSHOW PROCEDURE STATUSステートメント。
MySQL 8.0.20 より前では、ユーザーが定義しなかったルーチンの定義にアクセスするには、グローバルな
SELECT権限が必要です。これは非常に広範です。 8.0.20 の時点では、代わりに、ルーチン定義へのアクセスを許可するより制限されたスコープを持つ特権としてSHOW_ROUTINEを付与できます。 (つまり、管理者は、それを必要としないユーザーからグローバルSELECTを廃棄し、かわりにSHOW_ROUTINEを付与できます。) これにより、アカウントは広範囲の権限を必要とせずにストアドルーチンをバックアップできます。 -
SYSTEM_USER(MySQL 8.0.16 で追加)SYSTEM_USER権限は、システムユーザーを通常のユーザーと区別します:SYSTEM_USER権限を持つユーザーはシステムユーザーです。SYSTEM_USER権限を持たないユーザーは通常のユーザーです。
SYSTEM_USER権限は、特定のユーザーが他の権限を適用できるアカウント、およびそのユーザーが他のアカウントから保護されているかどうかに影響します:システムユーザーは、システムアカウントと通常アカウントの両方を変更できます。 つまり、通常のアカウントに対して特定の操作を実行する適切な権限を持つユーザーは、システムアカウントに対しても操作を実行するように
SYSTEM_USERを所有することで有効になります。 システムアカウントは、通常のユーザーではなく、適切な権限を持つシステムユーザーのみが変更できます。適切な権限を持つ通常のユーザーは通常のアカウントを変更できますが、システムアカウントは変更できません。 通常のアカウントは、適切な権限を持つシステムユーザーと通常のユーザーの両方が変更できます。
詳細は、セクション6.2.11「アカウントカテゴリ」を参照してください。
SYSTEM_USER権限によってシステムアカウントに付与される通常のアカウントによる変更からの保護は、mysqlシステムスキーマに対する権限を持つ通常のアカウントには適用されないため、そのスキーマの付与テーブルを直接変更できます。 完全保護のために、mysqlスキーマ権限を通常のアカウントに付与しないでください。 通常アカウントによる操作からのシステムアカウントの保護を参照してください。 -
次の操作およびサーバーの動作に影響します:
-
実行時のシステム変数の変更を有効にします:
SET GLOBALおよびSET PERSISTを使用して、グローバルシステム変数に対するサーバー構成の変更を有効にします。ユーザーが
PERSIST_RO_VARIABLES_ADMINも持っている場合、SET PERSIST_ONLYを使用してグローバルシステム変数に対するサーバー構成の変更を有効にします。特別な権限を必要とする制限付きセッションシステム変数の設定を有効にします。 実際には、
SYSTEM_VARIABLES_ADMINは、SESSION_VARIABLES_ADMINを明示的に付与せずにSESSION_VARIABLES_ADMINを暗黙的に意味します。
セクション5.1.9.1「システム変数権限」も参照してください。
グローバルトランザクション特性の変更を有効にします (セクション13.3.7「SET TRANSACTION ステートメント」 を参照)。
-
-
TABLE_ENCRYPTION_ADMIN(MySQL 8.0.16 で追加)table_encryption_privilege_checkが有効な場合に、ユーザーがデフォルトの暗号化設定をオーバーライドできるようにします。スキーマおよび一般テーブルスペースの暗号化デフォルトの定義 を参照してください。 -
バージョントークンのユーザー定義関数の実行を有効にします。 この権限は、
version_tokensプラグインによって定義されます。セクション5.6.6「バージョントークン」 を参照してください。 -
XA RECOVERステートメントの実行を有効にします。セクション13.3.8.1「XA トランザクション SQL ステートメント」 を参照してください。MySQL 8.0 より前は、すべてのユーザーが
XA RECOVERステートメントを実行して、未処理の準備済 XA トランザクションの XID 値を検出できたため、XA トランザクションを開始したユーザー以外のユーザーによる XA トランザクションのコミットまたはロールバックが発生する可能性がありました。 MySQL 8.0 では、XA RECOVERはXA_RECOVER_ADMIN権限を持つユーザーにのみ許可されます。これは、それを必要とする管理ユーザーにのみ付与されることが予想されます。 たとえば、XA アプリケーションがクラッシュし、ロールバックできるようにアプリケーションによって開始された未処理のトランザクションを検索する必要がある場合などです。 この権限要件により、ユーザーは自分以外の未処理の準備済 XA トランザクションの XID 値を検出できなくなります。 XA トランザクションを開始したユーザーが XID を認識しているため、XA トランザクションの通常のコミットまたはロールバックには影響しません。
アカウントには必要な権限のみを付与することをお勧めします。 FILE 権限と管理権限の付与については十分に注意するようにしてください。
FILEを使用すると、MySQL サーバーがサーバーホスト上で読み取ることができるファイルをデータベーステーブルに読み込むことができます。 これにはすべてのユーザーが読み取り可能なすべてのファイルと、サーバーのデータディレクトリ内のファイルが含まれます。 そのあと、SELECTを使用してそのテーブルにアクセスし、テーブルの内容をクライアントホストに送信することができます。GRANT OPTIONを使用すると、ユーザーは他のユーザーに権限を付与できます。 異なる権限を持つ 2 人のユーザーがGRANT OPTION権限を持っていれば、権限を組み合わせることができます。ALTERを使用すると、テーブルの名前を変更して権限システムを再変換できます。SHUTDOWNでは、サーバーを終了することで、他のユーザーに対するサービスを完全に拒否できます。PROCESSを使用すると、パスワードを設定または変更するステートメントを含む、現在実行中のステートメントのプレーンテキストを表示できます。SUPERを使用すると、他のセッションを終了したり、サーバーの動作方法を変更できます。-
mysqlシステムデータベース自体に付与された権限を使用して、パスワードおよびその他のアクセス権限情報を変更できます:パスワードは暗号化されて保管されているため、悪意のあるユーザーは単純にそのパスワードを見てプレーンテキストパスワードを知ることはできません。 ただし、
mysql.userシステムテーブルのauthentication_stringカラムへの書込みアクセス権を持つユーザーは、アカウントパスワードを変更し、そのアカウントを使用して MySQL サーバーに接続できます。mysqlシステムデータベースに付与されたINSERTまたはUPDATEを使用すると、ユーザーはそれぞれ権限を追加したり、既存の権限を変更できます。mysqlシステムデータベース用のDROPを使用すると、ユーザーはリモート権限テーブルまたはデータベース自体を使用できます。
MySQL では、静的権限および動的権限がサポートされています:
静的権限はサーバーに組み込まれています。 これらは常にユーザーアカウントに付与でき、登録解除できません。
動的権限は、実行時に登録および登録解除できます。 これは可用性に影響: 登録されていない動的権限は付与できません。
たとえば、SELECT および INSERT 権限は静的で常に使用可能ですが、動的権限は、それを実装するコンポーネントが有効になっている場合にのみ使用可能になります。
このセクションの残りの部分では、動的権限が MySQL でどのように機能するかについて説明します。 この説明では、「「コンポーネント」」という用語を使用しますが、プラグインにも同様に適用されます。
サーバー管理者は、動的権限を定義するサーバーコンポーネントに注意する必要があります。 MySQL ディストリビューションの場合、動的権限を定義するコンポーネントのドキュメントには、これらの権限が記載されています。
サードパーティコンポーネントでも動的権限を定義できます。管理者は、これらの権限を理解し、サーバー操作が競合または危険にさらされる可能性のあるコンポーネントをインストールしないでください。 たとえば、両方で同じ名前の権限が定義されている場合、あるコンポーネントが別のコンポーネントと競合します。 コンポーネント開発者は、コンポーネント名に基づいて接頭辞を持つ権限名を選択することで、この発生の可能性を減らすことができます。
サーバーは、登録された動的権限のセットをメモリー内に内部的に保持します。 サーバーの停止時に登録解除が発生します。
通常、動的権限を定義するコンポーネントは、インストール時に初期化シーケンス中にそれらを登録します。 アンインストール時に、コンポーネントは登録されている動的権限を登録解除しません。 (これは現在の演習であり、要件ではありません。 つまり、コンポーネントは、登録した権限でいつでも登録解除できますが、できません。)
すでに登録されている動的権限を登録しようとしても、警告やエラーは発生しません。 次の一連のステートメントについて考えてみます:
INSTALL COMPONENT 'my_component';
UNINSTALL COMPONENT 'my_component';
INSTALL COMPONENT 'my_component';
最初の INSTALL COMPONENT ステートメントでは、コンポーネント my_component によって定義された権限は登録されますが、UNINSTALL COMPONENT では登録解除されません。 2 番目の INSTALL COMPONENT ステートメントでは、登録するコンポーネント権限はすでに登録されていますが、警告やエラーは発生しません。
動的権限はグローバルレベルでのみ適用されます。 サーバーは、ユーザーアカウントへの動的権限の現在の割当てに関する情報を mysql.global_grants システムテーブルに格納します:
サーバーは、(
--skip-grant-tablesオプションが指定されていないかぎり) サーバーの起動時にglobal_grantsで指定された権限を自動的に登録します。GRANTおよびREVOKEステートメントによって、global_grantsの内容が変更されます。global_grantsにリストされている動的権限割当ては永続的です。 サーバーの停止時には削除されません。
例: 次のステートメントは、レプリカに対するレプリケーション (グループレプリケーションを含む) の制御およびシステム変数の変更に必要な権限をユーザー u1 に付与します:
GRANT REPLICATION_SLAVE_ADMIN, GROUP_REPLICATION_ADMIN, BINLOG_ADMIN
ON *.* TO 'u1'@'localhost';
付与された動的権限は、SHOW GRANTS ステートメントおよび INFORMATION_SCHEMA USER_PRIVILEGES テーブルからの出力に表示されます。
グローバルレベルの GRANT および REVOKE の場合、静的として認識されない名前付き権限は、現在登録されている動的権限のセットに対してチェックされ、見つかった場合は付与されます。 それ以外の場合は、不明な権限識別子を示すエラーが発生します。
GRANT および REVOKE の場合、グローバルレベルの ALL [PRIVILEGES]の意味には、すべての静的グローバル権限と、現在登録されているすべての動的権限が含まれます:
グローバルレベルの
GRANT ALLでは、すべての静的グローバル権限および現在登録されているすべての動的権限が付与されます。GRANTステートメントの実行後に登録された動的権限は、どのアカウントにも遡及的に付与されません。グローバルレベルの
REVOKE ALLは、付与されているすべての静的グローバル権限および付与されているすべての動的権限を取り消します。
FLUSH PRIVILEGES ステートメントは、動的権限割当てのために global_grants テーブルを読み取り、そこで見つかった未登録の権限を登録します。
MySQL Server によって提供される動的権限および MySQL ディストリビューションに含まれるコンポーネントの詳細は、セクション6.2.2「MySQL で提供される権限」 を参照してください。
MySQL 8.0 では、以前に SUPER 権限を必要としていた多くの操作も、より限定された有効範囲の動的権限に関連付けられています。 (これらの権限の詳細は、セクション6.2.2「MySQL で提供される権限」 を参照してください。) このような各操作は、SUPER ではなく、関連付けられた動的権限を付与することで、アカウントに対して許可できます。 この変更により、DBA は SUPER の付与を回避し、ユーザー権限を許可されている操作により厳密に調整できるため、セキュリティが向上します。 SUPER は非推奨になりました。将来のバージョンの MySQL で削除される予定です。
SUPER の削除が発生すると、SUPER を付与されたアカウントが適切な動的権限に移行されないかぎり、以前は SUPER を必要としていた操作は失敗します。 次の手順を使用して、SUPER を削除する前にアカウントの準備が整うようにその目標を達成します:
-
次のクエリーを実行して、
SUPERが付与されているアカウントを識別します:SELECT GRANTEE FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE PRIVILEGE_TYPE = 'SUPER'; -
前述のクエリーで識別されたアカウントごとに、
SUPERが必要な操作を決定します。 次に、これらの操作に対応する動的権限を付与し、SUPERを取り消します。たとえば、バイナリログのパージおよびシステム変数の変更に
'u1'@'localhost'でSUPERが必要な場合、次のステートメントによってアカウントに必要な変更が加えられます:GRANT BINLOG_ADMIN, SYSTEM_VARIABLES_ADMIN ON *.* TO 'u1'@'localhost'; REVOKE SUPER ON *.* FROM 'u1'@'localhost';適用可能なすべてのアカウントを変更した後、最初のステップの
INFORMATION_SCHEMAクエリーで空の結果セットが生成されます。