ユーザ権限に関する情報は、mysql
データベース(mysql
という名前のデータベース)の
user
、 db
、
host
、 tables_priv
、
columns_priv
、 procs_priv
などのテーブルにあります。MySQL
サーバは起動時、および
項4.7.7. 「権限の変更が反映するタイミング」
で説明する状況下において、これらのテーブルの内容をメモリへ読み取ります。アクセス制御に関する決定は、権限テーブルの内部メモリを基に行ないます。
GRANT
や REVOKE
などのステートメントで権限を指すときに使用する名前を、次の一覧に表示します。この一覧には、権限テーブルのそれぞれの権限に関連するカラム名とその権限を適用する内容
(適用範囲)
も示します。それぞれの権限に関する意味などに関しては、項12.5.1.3. 「GRANT
構文」
を参照してください。
権限 | カラム | 適用範囲 |
CREATE |
Create_priv |
データベース、テーブル、またはインデックス |
DROP |
Drop_priv |
データベースまたはテーブル |
GRANT OPTION |
Grant_priv |
データベース、テーブル、またはストアド ルーチン |
REFERENCES |
References_priv |
データベースまたはテーブル |
EVENT |
Event_priv |
データベース |
ALTER |
Alter_priv |
テーブル |
DELETE |
Delete_priv |
テーブル |
INDEX |
Index_priv |
テーブル |
INSERT |
Insert_priv |
テーブル |
SELECT |
Select_priv |
テーブル |
UPDATE |
Update_priv |
テーブル |
TRIGGER |
Trigger_priv |
テーブル |
CREATE VIEW |
Create_view_priv |
ビュー |
SHOW VIEW |
Show_view_priv |
ビュー |
ALTER ROUTINE |
Alter_routine_priv |
ストアド ルーチン |
CREATE ROUTINE |
Create_routine_priv |
ストアド ルーチン |
EXECUTE |
Execute_priv |
ストアド ルーチン |
FILE |
File_priv |
サーバ上のファイル アクセス |
CREATE TEMPORARY TABLES |
Create_tmp_table_priv |
サーバ管理 |
LOCK TABLES |
Lock_tables_priv |
サーバ管理 |
CREATE USER |
Create_user_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 |
サーバ管理 |
MySQL のリリースによっては、権限テーブルのストラクチャへの変更に、新たな権限または特徴を追加することになっています。新しいバージョンの MySQL にアップデートするときは、常に、権限テーブルの更新も同時に行い、カレント ストラクチャであることを確認し、新しい機能の利点を扱えるようにします。項4.5.4. 「mysql_upgrade — MySQL アップグレードのテーブル チェック」 を参照してください。
EVENT
および TRIGGER
の権限は MySQL 5.1.6 に追加しました。
バイナリ
ログを有効にした場合に格納関数の作成または置換するには、SUPER
権限が必要な場合があります。項17.4. 「ストアドルーチンとトリガのバイナリログ」
を参照してください。
CREATE
や DROP
などの権限で、新たなデータベースやテーブルの作成が行なえます。既存のデータベースやテーブルを削除することも可能です。MySQL
5.1.10 初期では、ALTER TABLE ... DROP
PARTITION
のステートメントを分割したテーブルに使用するときに
DROP
権限を必要としています。MySQL 5.1.16
初期では、DROP
権限は
TRUNCATE TABLE
に使用します。(TRUNCATE TABLE
には
DELETE
権限が必要。)
ユーザに対して、mysql
データベース のDROP
権限を与えると、そのユーザで MySQL
のアクセス権限があるデータベースの削除が行なえます。
SELECT
、INSERT
、UPDATE
、DELETE
などは、データベースの既存テーブルのレコード操作ができるようにする権限です。ANALYZE
TABLE
、OPTIMIZE
TABLE
、REPAIR TABLE
などのテーブル保守に関するステートメントには、INSERT
権限が必要です。
SELECT
ステートメントで、テーブルから直接にレコードを読み取る場合には
SELECT
権限が必要です。SELECT
ステートメントはテーブルへのアクセスはできませんが、データベースへのアクセス権がなくても実行できます。たとえば、mysql
クライアントをシンプルな計算機として使用するような場合です。
SELECT 1+1; SELECT PI()*2;
INDEX
は、インデックスを作成または破棄(削除)できる権限です。INDEX
権限は既存テーブルにでの適用となります。テーブルに対して
CREATE
権限がある場合、CREATE TABLE
ステートメントにインデックス定義を含めることも可能です。
ALTER
権限があると、ALTER
TABLE
でテーブルのストラクチャを変更したり、テーブルの名前を変更することができます。
CREATE ROUTINE
はストアド
ルーチンの作成に必要な権限です。ALTER
ROUTINE
はストアド
ルーチンの置換や削除に必要な関数です。EXECUTE
はストアド ルーチンの実行に必要な権限です。
TRIGGER
はテーブルのトリガの作成と削除に必要な権限です。MySQL
5.1.6
以前では、この操作には、SUPER
権限が必要です。
EVENT
はイベント
スケジューラのイベント
セットアップに必要な権限です。
GRANT
はユーザが自分の権限を他のユーザに与える権限です。これはデータベース、テーブル、ストアド
ルーチンに使用できます。
FILE
は、LOAD DATA
INFILE
および SELECT ... INTO
OUTFILE
ステートメントを使用してサーバ上でファイルの読み書きを行う権限です。FILE
権限を持つユーザは、サーバ
ホストのすべてのファイル、つまり MySQL
サーバの読み込み可能ファイルを読み込めます。(これは、この権限を持つユーザであれば、サーバがファイルへのアクセスを許可するために、データベース
ディレクトリのファイルを読むことができるということです。)
さらに、FILE
権限があるユーザは、MySQL
サーバが書き込みアクセスのあるディレクトリに、新しいファイルを作成できます。セキュリティ対策として、サーバは既存ファイルの上書きは行ないません。
その他の権限は、管理者用の権限です。この多くは、mysqladmin プログラムや SQL ステートメントを発行して実行できます。次の一覧テーブルは、どの管理権限で、mysqladmin コマンドで実行できるかを示します。
権限 | 実行可能なコマンド |
RELOAD |
flush-hosts , flush-logs ,
flush-privileges ,
flush-status ,
flush-tables ,
flush-threads ,
refresh , reload
|
SHUTDOWN |
shutdown |
PROCESS |
processlist |
SUPER |
kill |
reload
コマンドは、権限テーブルを再読み込みするよう、サーバに命令します。refresh
コマンドは、すべてのテーブルをフラッシュし、ログファイルを開いて閉じます。flush-privileges
は reload のシノニムです。他の
flush-
コマンドも xxx
refresh
と同様の役割を果たしますが、範囲が限られているため、状況によって使い分けます。たとえば、ログ
ファイルだけをフラッシュするときは、refresh
の代わりに flush-logs
を使用します。
shutdown
コマンドでサーバをシャットダウンします。これに関連する
SQL ステートメントはありません。
processlist
コマンドは、サーバで実行中のスレッドに関する情報を表示します。kill
コマンドはサーバ
スレッドを強制終了します。ユーザはいつでも自分のスレッドを表示および強制終了することができますが、他のユーザで開始したスレッドを表示するには
PROCESS
権限が必要です。強制終了するには
SUPER
権限が必要です。項12.5.5.3. 「KILL
構文」
を参照してください。
CREATE TEMPORARY TABLES
は CREATE
TABLE
ステートメントの
TEMPORARY
のキーワード使用を可能にする権限です。
LOCK TABLES
は、SELECT
権限でテーブルをロックするために、明示的な
LOCK TABLES
の使用を許可する権限。この権限で書き込みロックを制御して、不正読み込みからテーブルを守ります。
REPLICATION CLIENT
は、SHOW MASTER
STATUS
および SHOW SLAVE STATUS
の使用を可能にする権限です。
REPLICATION SLAVE
は、スレーブ
サーバがマスタとしてカレント
サーバに接続するときに使用するアカウントに対して与える権限です。この権限がないと、スレーブは、マスタ
サーバのデータベースに対して行なわれた更新を要求できません。
SHOW DATABASES
はデータベース名の閲覧を可能にする権限です。SHOW
DATABASE
権限がないアカウントでは、限定範囲でデータベースの内容を閲覧することができます。--skip-show-database
オプションでサーバを起動している場合には、このステートメントを使用できません。ノート:
グローバル権限があると、データベースに対するすべての権限
があることを意味します。
必要がない限り、この権限をアカウントに与えないでください。FILE
権限の付与と管理権限に関しては、次の事柄に対する十分な注意が必要です。
FILE
権限の悪用で、MySQL
サーバの読み取り可能ファイル、またはカレント
データベース
ディレクトリのファイルをデータベース
テーブルに対して、SELECT
を使用してその内容にアクセス可能になる。
GRANT
権限は、ユーザが自分の権限を他のユーザに与えることができる。2
人のユーザが異なる権限を持ち、両方とも
GRANT
権限がある場合、お互いの権限を組み合わせることができる。
ALTER
権限は、テーブルの名前を変更して、権限システムを崩壊することができる。
SHUTDOWN
権限の悪用で、サーバがシステム終了し、他のユーザへのサービス妨害となる。
PROCESS
権限は、パスワードの設定や変更を行うクエリなどを含め、現在実行中のクエリの平文テキストを表示することができる。
SUPER
権限は、クライアントの終了と、サーバ動作方法を変更できる。
mysql
データベースに対する権限があれば、パスワードおよびその他のアクセス権限情報を変更することができる。(パスワードを暗号化で保護しているため、悪意のあるユーザが単に読み取ってもテキスト形式のパスワードを知ることはできない)。user
テーブルの Password
カラムにアクセスできれば、それを悪用して特定ユーザの
MySQL
サーバにログインできる。(必要権限があれば、そのユーザはパスワードを書き換えることもできる)。
MySQL Enterprise. 必要以上のグローバル権限を付与すると、セキュリティ リスクに繋がります。MySQL Network Monitoring and Advisory Service では、該当するアカウントに関する警告を提供しています。詳細は http://www-jp.mysql.com/products/enterprise/advisors.html を参照してください。
次に、MySQL の権限システムでは不可能なことを示します。
特定のユーザに対してアクセス拒否を明示的に指定することはできない。つまり、特定のユーザを明確に割り出し、そこからの接続を拒否することができない、という意味。
データベース内のテーブルの作成および破棄の権限をユーザに与え、それと同時にデータベースの作成および破棄をできないようには指定できない。
アカウントのパスワードはグローバルで適用する。つまり、データベース、テーブル、ルーチンなど特定のオブジェクトに対するパスワードは付けられない。