ユーザ権限に関する情報は、mysql
データベース(mysql
という名前のデータベース)の
user
、db
、host
、tables_priv
、columns_priv
の各テーブルに保存されています。MySQL
サーバは起動時と、項4.4.3. 「権限の変更はいつ反映されるか」
で説明されている状況下において、これらのテーブルを読み取ります。
以下、このマニュアルで使用されている MySQL
バージョン 4.0.2
提供の権限名を、それに関連付けられているテーブルカラム名およびその適用範囲とともに示します。各権限の意味については、項4.4.1. 「GRANT
および REVOKE
の構文」
を参照してください。
権限 | カラム | 適用範囲 |
ALTER |
Alter_priv |
テーブル |
DELETE |
Delete_priv |
テーブル |
INDEX |
Index_priv |
テーブル |
INSERT |
Insert_priv |
テーブル |
SELECT |
Select_priv |
テーブル |
UPDATE |
Update_priv |
テーブル |
CREATE |
Create_priv |
データベース、テーブル、またはインデックス |
DROP |
Drop_priv |
データベースまたはテーブル |
GRANT |
Grant_priv |
データベースまたはテーブル |
REFERENCES |
References_priv |
データベースまたはテーブル |
CREATE TEMPORARY TABLES |
Create_tmp_table_priv |
サーバ管理 |
EXECUTE |
Execute_priv |
サーバ管理 |
FILE |
File_priv |
サーバ上のファイルアクセス |
LOCK TABLES |
Lock_tables_priv |
サーバ管理 |
PROCESS |
Process_priv |
サーバ管理 |
RELOAD |
Reload_priv |
サーバ管理 |
REPLICATION CLIENT |
Repl_client_priv |
サーバ管理 |
REPLICATION SLAVE |
Repl_slave_priv |
サーバ管理 |
SHOW DATABASES |
Show_db_priv |
サーバ管理 |
SHUTDOWN |
Shutdown_priv |
サーバ管理 |
SUPER |
Super_priv |
サーバ管理 |
SELECT
、INSERT
、UPDATE
、DELETE
の各権限は、データベース上の既存テーブルのレコードに対する各操作を許可するものです。
SELECT
ステートメントは、テーブルからレコードを実際に取り出す場合のみ、SELECT
権限が必要となります。サーバのデータベースへのアクセス権がなくても実行できる
SELECT
ステートメントもあります。たとえば、mysql
クライアントをシンプルな計算機として使用するような場合です。
mysql>SELECT 1+1;
mysql>SELECT PI()*2;
INDEX
権限では、インデックスを作成または破棄(削除)できます。
ALTER
権限では、ALTER
TABLE
を使用できます。
CREATE
および DROP
権限では、新規データベースおよびテーブルの作成、既存データベースおよびテーブルの破棄(削除)を行えます。
注意: ユーザに mysql
データベースに対する DROP
権限を与えると、そのユーザは MySQL
アクセス権限が保存されているデータベースを破棄できるということになるので注意が必要です。
GRANT
権限では、ユーザが所有している権限を他のユーザに与えることができます。
FILE
権限では、LOAD DATA
INFILE
および SELECT ... INTO
OUTFILE
ステートメントを使用してサーバ上でファイルの読み書きを行えます。この権限を与えられたユーザはだれでも、MySQL
サーバによってアクセス可能な読み取り可能ファイルをすべて読むことができ、また
MySQL
サーバによって書き込めるどのディレクトリにも新規読み取り可能ファイルを作成できます。
このユーザはまた、カレントデータベースディレクトリ内のすべてのファイルを読むことができます。
ただし、既存ファイルの変更はできません。
これら以外の権限は、mysqladmin
プログラムを使用して実行される管理操作用に使用されます。以下の表で、どの管理権限でどの
mysqladmin
コマンドを実行できるかを示します。
権限 | 実行可能なコマンド |
RELOAD |
reload 、refresh 、flush-privileges 、flush-hosts 、flush-logs 、flush-tables
|
SHUTDOWN |
shutdown |
PROCESS |
processlist |
SUPER |
kill |
reload
コマンドは、権限テーブルを再読み込みするようにサーバに命令します。refresh
コマンドは、すべてのテーブルをフラッシュし、ログファイルを開いて閉じます。flush-privileges
は reload
のシノニムです。他の
flush-*
コマンドも
refresh
と同様の機能を果たしますが、範囲が限られており、状況によって使い分けてください。たとえば、ログファイルだけをフラッシュするには、refresh
の代わりに flush-logs
を使用します。
shutdown
コマンドはサーバをシャットダウンします。
processlist
コマンドは、サーバで実行中のスレッドに関する情報を表示します。kill
コマンドはサーバスレッドを強制終了します。ユーザはいつでも自分のスレッドを表示および強制終了することができますが、他のユーザによって開始されたスレッドを表示するには
PROCESS
権限が、強制終了するには
SUPER
権限が必要です。 See
項4.6.7. 「KILL
構文」。
一般的な指針として、ユーザにはそのユーザが必要とする権限だけを与えてください。また、以下の権限を与える際には注意が必要です。
GRANT
権限は、ユーザが自分の権限を他のユーザに与えることができる。2
人のユーザが異なる権限を持ち、両方とも
GRANT
権限がある場合、お互いの権限を組み合わせることができる。
ALTER
権限は、テーブルの名前を変更することにより、権限システムを崩壊させることができる。
FILE
権限を悪用すれば、サーバの読み取り可能ファイルまたはカレントデータベースディレクトリのファイルをデータベーステーブルに読み込んで、SELECT
を使用してその内容にアクセスできる。
SHUTDOWN
権限を悪用すれば、サーバを終了して、他のユーザへのサービス妨害を行うことができる。
PROCESS
権限は、パスワードの設定や変更を行うクエリなども含め、現在実行中のクエリのプレーンテキストを表示することができる。
mysql
データベースの権限があれば、パスワードおよびその他のアクセス権限情報を変更することができる(パスワードは暗号化されて保存されているため、悪意のあるユーザが単に読み取ってもテキスト形式のパスワードを知ることはできない)。mysql.user
パスワードカラムにアクセスできれば、それを使用して特定ユーザの
MySQL
サーバにログインできる(必要とされる権限を持っていれば、そのユーザはパスワードを書き換えることもできる)。
MySQL 権限システムでは達成できないこともいくつかあります。
特定ユーザからのアクセスを拒否するよう明示的に指定できない。 つまり、ユーザを特定して、その接続を拒否することはできない。
データベース内のテーブルの作成および破棄の権限をユーザに与え、それと同時にデータベースの作成および破棄をできないようには指定できない。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.