powerdee.com
Google
 
このサイト内 Web
 
カウンタ

権限管理

インデックスへ戻る

権限の付与

権限の付与は、GRANT文により行う。
GRANT構文は、以下のようになっている。括弧[]はオプション、#は整数値。

GRANT 付与する権限の種類[(カラムリスト)] [,付与する権限の種類[(カラムリスト) …] 
    ON データベース名.テーブル名 
    TO ユーザー名@ホスト名 [,ユーザー名@ホスト名 …]
    [IDENTIFIED BY [パスワード]]
    [WITH [GRANT_OPTION | MAX_QUERIES_PER_HOUR # |
                          MAX_UPDATES_PER_HOUR # |
                          MAX_CONNECTIONS_PER_HOUR #]]

MySQLの権限は以下のレベルに分けられている。

グローバルレベル

全てのデータベースに権限が付与される。
以下のようにデータベース名とテーブル名の指定を"*.*"のように行う。
※情報は、mysql.userテーブルに記録される。

GRANT ALL ON *.* TO user1@localhost IDENTIFIED BY 'pass1';

データベースレベル

指定したデータベースの全てのテーブルに権限が付与される。
以下のようにテーブル名の指定を"db.*"のように行う。
※情報は、mysql.db及びmysql.hostテーブルに記録される。
管理者ユーザー以外の通常のユーザーはこの方法が良いと思う。

GRANT ALL ON `demo\_db`.* TO user2@localhost IDENTIFIED BY 'pass2';

テーブルレベル

指定したテーブルの全てのカラムに権限が付与される。
※情報は、mysql.tables_privテーブルに記録される。
以下のように指定する。

GRANT ALL ON `demo\_db`.address TO user3@localhost IDENTIFIED BY 'pass3';

カラムレベル

1つのカラムに権限が付与される。
※情報は、mysql.columns_privテーブルに記録される。
例えば、demo_dbデータベースaddressテーブルのpref、cityカラムのみ参照・更新する権限を付与したい場合、以下のように指定する。

GRANT SELECT(pref, city),UPDATE(pref, city) ON `demo\_db`.address TO user4@localhost IDENTIFIED BY 'pass4';


権限の取り消し

取り消しはREVOKE文を使用する。構文は以下のとおり。

REVOKE 取消する権限の種類[(カラムリスト)] [,取消する権限の種類[(カラムリスト) …] 
    ON データベース名.テーブル名 
    FROM ユーザー名@ホスト名 [,ユーザー名@ホスト名 …]

設定可能権限一覧

GRANT、REVOKE文で指定可能な権限と設定可能レベルの一覧を以下に示す。

権限名 内容 Global DB Table Column
ALL [PRIVILEGES] WITH GRANT OPTION以外の全て
ALTER ALTER TABLEの使用を許可
ALTER ROUTINE ストアドプロシージャ/ファンクションの変更と削除を許可
CREATE CREATE TABLEの使用を許可
CREATE ROUTINE ストアドプロシージャ/ファンクションの作成を許可
CREATE TEMPORARY TABLES CREATE TEMPORARY TABLEの使用を許可
CREATE USER CREATE USER、DROP USER、RENAME USER、REVOKE ALL PRIVILEGESの使用を許可
CREATE VIEW CREATE VIEWの使用を許可
DELETE DELETEの使用を許可
DROP DROPの使用を許可
EXECUTE ストアドプロシージャ/ファンクションの実行を許可
FILE SELECT ... INTO OUTFILE 及び LOAD DATA INFILEの使用を許可
INDEX CREATE INDEX 及び DROP INDEXの使用を許可
INSERT INSERTの使用を許可
LOCK TABLES SELECT権限を持つテーブルでLOCK TABLESの使用を許可
PROCESS SHOW FULL PROCESSLISTの使用を許可
REFERENCES 定義のみ(未実装)
RELOAD FLUSHの使用を許可
REPLICATION CLIENT SHOW MASTER STATUS、SHOW SLAVE STATUSの使用を許可
REPLICATION SLAVE インスタンスをレプリケーションのスレーブとして動作させることを許可
(マスタからバイナリログを読み取る為)
SELECT SELECTの使用を許可
SHOW DATABASES SHOW DATABASEによりすべてのデータベースが表示される
SHOW VIEW SHOW CREATE VIEWの使用を許可
SHOTDOWN mysqladmin shutdownの使用を許可
SUPER 最大接続数に達していても接続を 1 つだけ許可し、コマンド
CHANGE MASTER、KILL thread、mysqladmin debug、PURGE MASTER LOGS、
および SET GLOBAL の実行を許可
UPDATE UPDATE の使用を許可
USAGE 権限なしのシノニム(権限なしのユーザを作成する)
GRANT OPTION WITH GRANT OPTION のシノニム

権限の再付与

WITH GRANT OPTION句を付けると、そのユーザーは他のユーザーに権限を付与できるようになる。
以下のSQL文でuser1は他のユーザーにグローバルレベルのSELECT権限を付与できる。

GRANT SELECT ON *.* TO user1 IDENTIFIED BY 'pass1' WITH GRANT OPTION;

ユーザーリソースの制限

個別のユーザー毎に以下のリソースに対して制限ができる。

GRANT ... WITH MAX_QUERIES_PER_HOUR #      <-- 時間単位の全クエリ数(1ユーザが実行できるクエリ)
               MAX_UPDATES_PER_HOUR #      <-- 時間単位の全更新数(テーブルまたはデータベースを変更するクエリ)
               MAX_CONNECTIONS_PER_HOUR #  <-- 時間単位の接続数(1時間に新しく開かれる接続)

例えば以下のようにして、1時間に500回のSQL実行(UPDATEも含まれる)・100回の更新・10回までの接続に制限される

GRANT ALL ON *.* TO user1 IDENTIFIED BY 'pass1'
    WITH MAX_QUERIES_PER_HOUR 500 
         MAX_UPDATES_PER_HOUR 100 
         MAX_CONNECTIONS_PER_HOUR 10;

インデックスへ戻る


おすすめ書籍


現場で使える MySQL (DB Magazine SELECTION)

著者:松信 嘉範
出版社:翔泳社(2006-03-17)
価格:¥2,730(税込)
MySQL 徹底入門 第2版

著者:遠藤 俊裕、坂井 恵、館山 聖司、鶴長 鎮一、とみた まさひろ、班石 悦夫、松信 嘉範
出版社:翔泳社(2006-01-24)
価格:¥3,654(税込)


ページTopへ / ▲Homeへ