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

  • このエントリーをはてなブックマークに追加
  • LINEで送る
この記事は 2020年1月25日 に書かれたものです

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

GRANT ALL On db1.* To katsube@localhost;

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

- Sponsored Link -

基本的な利用方法

権限の指定

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;

詳細は別の記事を参照ください。

権限一覧

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

データ操作

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

データ定義

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

ユーザー管理

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

ビュー

権限GLOBALDBTABLECOLUMN説明
CREATE VIEWビューの作成と変更が可能
SHOW VIEWSHOW 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が閲覧可能
PROCESSSHOW PROCESSLISTですべてのプロセスが閲覧可能
SHUTDOWNmysqladmin shutdownの利用が可能
RELOADFLUSHの利用が可能
PROXYプロキシ設定を有効
EVENTイベントスケジューラでイベントの使用を有効
SUPER管理操作が有効。CHANGE MASTER TO、KILL、PURGE BINARY LOGS、SET GLOBAL、mysqladmin debug コマンドなど

参考ページ

コメント

コメント欄は休止中です。お問い合わせはこちらからどうぞ。ご質問はTwitterにリプを投げてください。

このブログを応援する

お寄せいただいたお気持ちは全額サーバ代や次の記事を執筆するための原資として活用させていただいております。この記事が参考になった場合などぜひご検討ください。

PayPal(ペイパル)
PayPalで300円支払う
※金額は任意で変更できます。
※100円でも泣いて喜びますw
※住所の入力欄が現れた場合は「no needed」を選択ください
これまでのご協力者さま
- Sponsored Link -