MySQLのユーザー作成という記事で、ユーザーの追加を行いました。 作成されたユーザーには、データベースのアクセス権限がなく、言わば何もできないユーザーです。そのため、作成したユーザーにデータベースやテーブルへのアクセス権限を与えて、特定のデータベースやテーブルにのみアクセスできるユーザーを作ってみましょう。

MySQLの権限設定

3年以上前に更新されました。情報が古い可能性があります。
更新日 : 2019年07月01日

MySQLのユーザー作成という記事で、ユーザーの追加を行いました。

作成されたユーザーには、データベースのアクセス権限がなく、言わば何もできないユーザーです。そのため、作成したユーザーにデータベースやテーブルへのアクセス権限を与えて、特定のデータベースやテーブルにのみアクセスできるユーザーを作ってみましょう。

権限設定の書式

ユーザーに対する権限追加のSQLの書式は以下のようになります。

GRANT 権限タイプ ON DB名.テーブル名 TO 'ユーザー名'@'ホスト名';

基本的にはこれだけです。

権限タイプ

権限タイプの部分にはINSERTSELECTUPDATEDELETEの4種類を作成したユーザーに応じて入れることが多いです。その他権限タイプがたくさんありますが、必要に応じて調べれば十分かと思います。その他の権限タイプについては時間があるときに別記事で解説します。

DB名.テーブル名

DB名.テーブル名の部分には、設定したい権限を反映するデータベースやテーブルを指定します。

特定のデータベースのすべてのテーブルに反映したい場合にはDB名.*のように*を使うことによって、すべてのテーブルを指定できます。

すべてのデータベースですべてのテーブルに権限を付与する場合には*.*のように書くことによって権限を反映できます。

'ユーザー名'@'ホスト名'

この部分は作成したユーザーを書けば良いです。ホスト名の指定も忘れないように注意しましょう。

実際に権限を付与してみる

前回のMySQLのユーザー作成では、'test_user'@'localhost'というユーザーを作成しました。このユーザーに権限を実際に追加してみましょう。

  • testデータベースのusersテーブルにSELECTとINSERTの権限を追加する場合
GRANT SELECT, INSERT ON test.users TO 'test_user'@'localhost';

SELECTとINSERTのように複数の権限を追加する場合にはカンマ区切りで指定できます。

  • testデータベースのすべてのテーブルにSELECTの権限を追加する場合
GRANT SELECT ON test.* TO 'test_user'@'localhost';

このような形で権限を追加することができます。

追加した権限の確認

権限の確認もSQLで実行可能です。

以下の書式で権限の確認が可能です。

SHOW GRANTS for ユーザー名;

先程の'test_user'@'localhost'であれば以下のようになります。

SHOW GRANTS for 'test_user'@'localhost';

実行結果は以下のようになります。