MySQL 5.1 リファレンスマニュアル :: 4 データベース管理 :: 4.7 MySQL アクセス権限システム :: 4.7.3 MySQL 提供の権限
« 4.7.2 権限システムの機能

4.7.4 MySQL サーバへの接続 »
Section Navigation      [Toggle]
  • 4.7 MySQL アクセス権限システム
  • 4.7.1 権限システムの役割
  • 4.7.2 権限システムの機能
  • 4.7.3 MySQL 提供の権限
  • 4.7.4 MySQL サーバへの接続
  • 4.7.5 アクセス制御の段階 1: 接続確認
  • 4.7.6 アクセス制御の段階 2: 接続確認
  • 4.7.7 権限の変更が反映するタイミング
  • 4.7.8 Access denied エラーの原因
  • 4.7.9 MySQL 4.1 のパスワードハッシュ

4.7.3. MySQL 提供の権限

ユーザ権限に関する情報は、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 の権限システムでは不可能なことを示します。

  • 特定のユーザに対してアクセス拒否を明示的に指定することはできない。つまり、特定のユーザを明確に割り出し、そこからの接続を拒否することができない、という意味。

  • データベース内のテーブルの作成および破棄の権限をユーザに与え、それと同時にデータベースの作成および破棄をできないようには指定できない。

  • アカウントのパスワードはグローバルで適用する。つまり、データベース、テーブル、ルーチンなど特定のオブジェクトに対するパスワードは付けられない。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates