Webサイト制作コースのお申し込みはこちら

今回の記事ではMySQLで作成したユーザーに何らかの権限を与える方法について解説していきます。

アカウント毎の権限付与は共同で開発を進める上で重要な要素となりますので、しっかり学習してみましょう。

権限の付与について

データベースでroot以外のアカウントを作成する場合には”CREATE USER”を使用しますが、これだけではまだ作成されたアカウントには何の権限もついていません。

そこでアカウントを作成したら次の作業として、アカウント毎に権限を持たせる必要が有ります。

この権限付与には次のクエリを使用します。

GRANT [権限] ON [適用対象のデータベース].[適用対象のテーブル] TO 'ユーザ名'@'ホスト名' IDENTIFIED BY 'パスワード';

上記クエリに記載されている[権限]項目は後述する為、今は省略します。

形としてはCREATE USERと変わらない式となっているので、そう難しいものではありません。

では次からはこの[権限]の内容について、もう少し掘り下げて解説します。

権限について

先ほど簡単に説明した[権限]の種類について、ここではリスト形式で見ていきます。

権限について
ALL
GRANT OPTION(権限の付与)以外の全てを許可する
ALTER
ALTER TABLE(テーブルの変更)の使用を許可する
ALTER ROUTINE
ストアドルーチンの変更・削除を許可する
CREATE
データベースとテーブルの作成を許可する
CREATE ROUTINE
ストアドルーチンの作成を許可する
CREATE USER
ユーザの作成・変更・削除を許可する
DELETE
DELETE文の使用を許可する
DROP
DROP文の使用を許可する
EVENT
イベントスケジューラのイベント作成を許可する
INDEX
インデックスの作成と削除を許可する
INSERT
INSERT文の使用を許可する
SELECT
SELECT文の使用を許可する
SHOW DATABASES
SHOW DATABASEで全データベースの表示を許可する
SHUTDOWN
mysqladmin shutdownの使用を許可する
TRIGGER
トリガの作成・削除を許可する
UPDATE
UPDATE文の使用を許可する
USAGE
「権限なし」を設定する

これらのコマンドは一部であり、これ以外にも様々なコマンドが存在します。

またこれらのコマンドは適用される範囲がそれぞれ異なりますので、必要に応じて調べてみましょう。

権限の与え方について

では実際にコマンドを使用して権限を付与してみましょう。

この項目を進めていくにあたり、権限を与えるユーザーアカウントを作成するところから解説します。

また今回は「ALL」「権限を一つだけ与える方法」「複数権限を同時に与える方法」を解説しますので、ユーザーは3つ用意します。

それでは早速ですが下のクエリを見てください。

// 権限を与えるためのユーザーアカウントを作成する
CREATE USER 'user_01'@'localhost' IDENTIFIED BY 'pass123';
Query OK, 0 rows affected (0.000 sec)

CREATE USER 'user_02'@'localhost' IDENTIFIED BY 'pass123';
Query OK, 0 rows affected (0.000 sec)

CREATE USER 'user_03'@'localhost' IDENTIFIED BY 'pass123';
Query OK, 0 rows affected (0.000 sec)

// 作成したアカウントを確認する
SELECT user, host FROM mysql.user;
+---------+-----------+
| User    | Host      |
+---------+-----------+
| root    | 127.0.0.1 |
| root    | ::1       |
| pma     | localhost |
| root    | localhost |
| user_01 | localhost |
| user_02 | localhost |
| user_03 | localhost |
+---------+-----------+

まずアカウントを3つ作成しました。SELECTで確認すると3つのアカウントが追加されていることが確認できます。

続いて、この3つのアカウントに上記で書いたようにそれぞれ権限を与えましょう。

“user_01″には「ALL」を、”user_02″には「SELECTだけ」を、”user_03″には「INSERTとDELETE」を与えてみます。

// 権限を与えるためのユーザーアカウントを作成する
GRANT ALL ON sample_db.sample_table TO 'user_01'@'localhost' IDENTIFIED BY 'pass123';
Query OK, 0 rows affected (0.000 sec)

GRANT SELECT ON sample_db.sample_table TO 'user_02'@'localhost' IDENTIFIED BY 'pass123';
Query OK, 0 rows affected (0.000 sec)

GRANT INSERT, DELETE ON sample_db.sample_table TO 'user_03'@'localhost' IDENTIFIED BY 'pass123';
Query OK, 0 rows affected (0.000 sec)

FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.000 sec)

// 権限を与えたアカウントを確認する
show grants for 'user_01'@'localhost';
+----------------------------------------------------------------------------------------------------------------+
| Grants for user_01@localhost                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user_01'@'localhost' IDENTIFIED BY PASSWORD '*FB6E1F205D675BC29B052DB14CCEFE7759C5FF7E' |
| GRANT ALL PRIVILEGES ON `sample_db`.`sample_table` TO 'user_01'@'localhost'                                    |
+----------------------------------------------------------------------------------------------------------------+
2 rows in set (0.000 sec)

show grants for 'user_02'@'localhost';
+----------------------------------------------------------------------------------------------------------------+
| Grants for user_02@localhost                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user_02'@'localhost' IDENTIFIED BY PASSWORD '*FB6E1F205D675BC29B052DB14CCEFE7759C5FF7E' |
| GRANT SELECT ON `sample_db`.`sample_table` TO 'user_02'@'localhost'                                            |
+----------------------------------------------------------------------------------------------------------------+
2 rows in set (0.000 sec)

show grants for 'user_03'@'localhost';
+----------------------------------------------------------------------------------------------------------------+
| Grants for user_03@localhost                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user_03'@'localhost' IDENTIFIED BY PASSWORD '*FB6E1F205D675BC29B052DB14CCEFE7759C5FF7E' |
| GRANT INSERT, DELETE ON `sample_db`.`sample_table` TO 'user_03'@'localhost'                                    |
+----------------------------------------------------------------------------------------------------------------+
2 rows in set (0.000 sec)

このように、複数の権限を与える場合にはカンマで区切ってクエリを実行すると、複数の権限が同時に与えられていることが確認できたと思います。

なお権限を与える場合、”GRANT”を使用し全てのアカウントに設定を追加したら最後に”FLUSH PRIVILEGES;”で設定を反映させることを忘れないようにしてください。

権限を削除する

次は逆に権限の削除について解説していきます。

まずは下のクエリを見てください。

REVOKE [権限] ON [適用対象のデータベース].[適用対象のテーブル] FROM 'ユーザ名'@'ホスト名';
FLUSH PRIVILEGES;

権限の削除をする場合には”REVOKE”を使います。

基本的には権限の追加で使用した”GRANT”と同じですので使い方で悩むことはないと思います。

こちらも複数の権限を削除する場合にはカンマで区切って指定し、最後に設定の反映を行うために”FLUSH PRIVILEGES;”を実行して終わりです。

まとめ

いかがでしたか?

今回は権限を付与する”GRANT”と権限を削除する”REVOKE”について解説してみました。

MySQLで使用することが度々あると思いますので、まずは基本的なクエリでもあるこの辺りから学習してMySQLを触りながら慣れていくと良いと思います。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。