作成済みのユーザーに権限を付与するには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
権限一覧
公式ドキュメントを再編集したものです。
データ操作
権限 | GLOBAL | DB | TABLE | COLUMN | 説明 |
---|---|---|---|---|---|
INSERT | ◯ | ◯ | ◯ | ◯ | INSERT文が利用可能 |
SELECT | ◯ | ◯ | ◯ | ◯ | SELECT文が利用可能 |
UPDATE | ◯ | ◯ | ◯ | ◯ | UPDATE文が利用可能 |
DELETE | ◯ | ◯ | ◯ | ◯ | DELETE文が利用可能 |
FILE | ◯ | - | - | - | ファイルの読み書きを可能にする |
LOCK TABLES | ◯ | ◯ | - | - | LOCK TABLESが利用可能(対象のテーブルにSELECT権限が必要) |
データ定義
権限 | GLOBAL | DB | TABLE | COLUMN | 説明 |
---|---|---|---|---|---|
CREATE | ◯ | ◯ | ◯ | - | データベース,テーブルを新規作成 |
CREATE TEMPORARY TABLES | ◯ | ◯ | - | - | セッション内のみで有効な一時的なテーブルの作成が可能(セッション終了で自動削除) |
CREATE TABLESPACE | ◯ | - | - | - | テーブルスペースの作成、削除、変更が可能 |
DROP | ◯ | ◯ | ◯ | - | データベース,テーブル,ビューを削除 |
ALTER | ◯ | ◯ | ◯ | - | ALTER TABLEが利用可能 |
INDEX | ◯ | ◯ | ◯ | - | インデックスの作成と削除が可能 |
ユーザー管理
権限 | GLOBAL | DB | TABLE | COLUMN | 説明 |
---|---|---|---|---|---|
CREATE USER | ◯ | - | - | - | CREATE USER, DROP USER, RENAME USER, REVOKE ALL PRIVILEGESの利用が可能 |
GRANT OPTION | ◯ | ◯ | ◯ | 他のアカウントへ権限の付与、権限の剥奪が可能 |
ビュー
権限 | GLOBAL | DB | TABLE | COLUMN | 説明 |
---|---|---|---|---|---|
CREATE VIEW | ◯ | ◯ | ◯ | - | ビューの作成と変更が可能 |
SHOW VIEW | ◯ | ◯ | ◯ | SHOW CREATE VIEWが利用可能 |
ストアドルーチン
権限 | GLOBAL | DB | TABLE | COLUMN | 説明 |
---|---|---|---|---|---|
CREATE ROUTIN | ◯ | ◯ | - | - | ストアドルーチンの作成が可能 |
ALTER ROUTINE | ◯ | ◯ | - | - | ストアドルーチンの変更、削除が可能 |
EXECUTE | ◯ | ◯ | ◯ | - | ストアドルーチンの実行が可能 |
ALTER ROUTINE
は「プロシージャー権限」も適用可能です。
トリガー
権限 | GLOBAL | DB | TABLE | COLUMN | 説明 |
---|---|---|---|---|---|
TRIGGER | ◯ | ◯ | ◯ | - | トリガーの操作が可能 |
レプリケーション
権限 | GLOBAL | DB | TABLE | COLUMN | 説明 |
---|---|---|---|---|---|
REPLICATION CLIENT | ◯ | - | - | - | マスター、スレーブの場所を問い合わせ可能 |
REPLICATION SLAVE | ◯ | - | - | - | スレーブからマスターのバイナリログの読み取りを行うことが可能 |
その他
権限 | GLOBAL | DB | TABLE | COLUMN | 説明 |
---|---|---|---|---|---|
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 コマンドなど |