[MySQL] 権限を付与する - GRANT

作成済みのユーザーに権限を付与するにはGRANT文を利用します。実行にはGRANTを利用できる権限が必要です。

GRANT ALL On db1.* To katsube@localhost;

上記はdb1という名前のデータベース内にあるすべてのテーブルに全権限を付与しています。

基本的な利用方法

権限の指定

GRANTに続いて具体的にどのような権限を付与するか指定します。

例えばSQLのSELECT文だけを許可したい場合には以下のように指定します。

GRANT SELECT ON db1.* To katsube@localhost;

また権限は同時に複数指定することが可能です。以下のようにカンマで区切ります。

GRANT INSERT,SELECT,UPDATE,DELETE On db1.* To katsube@localhost;

具体的な権限の種類についてはこのページの下の方までスクロールしてください。

権限の範囲

MySQLでは各ユーザーに対してグローバル(サーバ全体)、データベース、テーブル、カラムそれぞれの権限を付与することができます。

GRANT ALL On *.* TO katsube@localhost;             -- グローバル
GRANT ALL On db1.* TO katsube@localhost;           -- データベース
GRANT ALL On db1.foo TO katsube@localhost;         -- テーブル
GRANT ALL(col1) On db1.foo TO katsube@localhost;   -- カラム

この他にもストアドルーチン、プロキシユーザーなどの権限も設定できます。このあたりの詳細はドキュメントを参照ください。

ユーザーとホストの指定

CREATE USERした際のユーザー名とホストをそのまま指定します。ホスト名にワイルドカードを利用している場合はワイルドカードをそのまま記述します。

GRANT ALL On *.* To katsube@'%.example.com';

他の記事でも書きましたが、MySQLではユーザー名が同一であってもホストが変わると全くの別人になりますので、以下のようにユーザー名とホスト名が一致しない場合はユーザーが存在しないためエラーとなります。

mysql> SELECT User, Host FROM mysql.user WHERE User='user';
+---------------+-----------+
| User          | Host      |
+---------------+-----------+
| user          | foo.%     |
| user          | localhost |
+---------------+-----------+

mysql>  GRANT ALL On *.* TO user;
ERROR 1133 (42000): Can't find any matching row in the user table

権限を確認

現在付与されている権限はSHOW GRANTS構文で確認できます。

mysql> SHOW GRANTS for katsube@localhost;
+------------------------------------------------------+
| Grants for katsube@localhost                         |
+------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'katsube'@'localhost' |
+------------------------------------------------------+

権限を剥奪

REVOKE構文で指定した権限を削除することが可能です。

REVOKE ALL ON *.* FROM katsube@localhost;

詳細は別の記事を参照ください。 blog.katsubemakito.net

権限一覧

公式ドキュメントを再編集したものです。

データ操作

権限GLOBALDBTABLECOLUMN説明
INSERT INSERT文が利用可能
SELECT SELECT文が利用可能
UPDATE UPDATE文が利用可能
DELETE DELETE文が利用可能
FILE - - - ファイルの読み書きを可能にする
LOCK TABLES - - LOCK TABLESが利用可能(対象のテーブルにSELECT権限が必要)

データ定義

権限GLOBALDBTABLECOLUMN説明
CREATE - データベース,テーブルを新規作成
CREATE TEMPORARY TABLES - - セッション内のみで有効な一時的なテーブルの作成が可能(セッション終了で自動削除)
CREATE TABLESPACE - - - テーブルスペースの作成、削除、変更が可能
DROP - データベース,テーブル,ビューを削除
ALTER - ALTER TABLEが利用可能
INDEX - インデックスの作成と削除が可能

ユーザー管理

権限GLOBALDBTABLECOLUMN説明
CREATE USER - - - CREATE USER, DROP USER, RENAME USER, REVOKE ALL PRIVILEGESの利用が可能
GRANT OPTION 他のアカウントへ権限の付与、権限の剥奪が可能

ビュー

権限GLOBALDBTABLECOLUMN説明
CREATE VIEW - ビューの作成と変更が可能
SHOW VIEW SHOW CREATE VIEWが利用可能

ストアドルーチン

権限GLOBALDBTABLECOLUMN説明
CREATE ROUTIN - - ストアドルーチンの作成が可能
ALTER ROUTINE - - ストアドルーチンの変更、削除が可能
EXECUTE - ストアドルーチンの実行が可能
  • ALTER ROUTINEは「プロシージャー権限」も適用可能です。

トリガー

権限GLOBALDBTABLECOLUMN説明
TRIGGER - トリガーの操作が可能

レプリケーション

権限GLOBALDBTABLECOLUMN説明
REPLICATION CLIENT - - - マスター、スレーブの場所を問い合わせ可能
REPLICATION SLAVE - - - スレーブからマスターのバイナリログの読み取りを行うことが可能

その他

権限GLOBALDBTABLECOLUMN説明
ALL 全権限を付与(GRANT OPTIONをのぞく)
USAGE 権限なし
SHOW DATABASES - - - すべてDBが閲覧可能
PROCESS - - - SHOW PROCESSLISTですべてのプロセスが閲覧可能
SHUTDOWN - - - mysqladmin shutdownの利用が可能
RELOAD - - - FLUSHの利用が可能
PROXY - - - - プロキシ設定を有効
EVENT - - イベントスケジューラでイベントの使用を有効
SUPER - - - 管理操作が有効。CHANGE MASTER TO、KILL、PURGE BINARY LOGS、SET GLOBAL、mysqladmin debug コマンドなど

参考ページ