jumper

コラム

MySQLのアクセス権限システム

2018年11月29日
MySQLのアクセス権限システム

MySQLはバージョンが進むにつれて他の有償データベースに劣らない機能が追加されてきています。ユーザーの管理についても同様に、さまざまな点で改良が施されてきました。特にアクセス権限、リソース制限についてはバージョンによって設定できる範囲に違いがあります。ここでは基本的に5.7以降の機能について解説しています。

ユーザー管理

MySQLにはユーザーのタイプが3種類あります。それぞれのタイプによってアクセス権限や行動範囲が異なってきます。rootユーザー、一般ユーザー、匿名ユーザーとなっています。

rootユーザーはMySQLを初期設定する際に登録され、すべての操作が可能になる、もっとも優位なユーザーです。一般ユーザーは主にデータベースの作業では使われるユーザーで、さまざまな権限を割り当てることで、使い道が変わってきます。匿名ユーザーもMySQLインストール時に自動作成されていますが、ほぼ権限がありません。しかし、テーブル削除などが可能なため、セキュリティ観点を考慮し事前に削除することを推奨している会社もあります。

ユーザーの管理としてはまずユーザー一覧を参照することが、最初のステップではないでしょうか。

mysql> SELECT user, host, password FROM mysql.user;

これでユーザー名とホスト、パスワードのリストが表示されます。
ユーザー名が表示されていないユーザーが匿名ユーザーです。

ユーザーの削除は

mysql> drop user ユーザー名@ホスト;

で実行されます。
また、作成は以下のコマンドで実行されます。

mysql> create user ユーザー名@ホスト identified by パスワード;

ユーザーの作成についてはアクセス権限やアクセスできるリソースの制限など、慎重に設定する必要があります。不用意な権限を与えて、セキュリティ上重要なトラブルにならないよう気をつけてください。

アクセス権限

MySQLでは細かくユーザーの権限を設定できます。ユーザー毎にアクセスできるデータベースやホストを設定できますし、テーブルの作成や削除、閲覧と更新も、ユーザー毎に設定できます。用途によって使い分けてください。

各ユーザーの権限を確認するためには以下のコマンドが使えます。

mysql> show grants for ユーザー名@ホスト;

また、権限の設定は以下のコマンドになります。

mysql> grants 権限(例えばSELECT) on DB.テーブル to ユーザー名@ホスト;

リソース制限

MySQLでの運用でサーバ管理者がもっとも注意したいポイントのひとつにリソースがあります。リソースが足りなくなると、いわゆる高負荷の状態になり、最悪サーバがダウンしてしまいます。リソース不足に対する対策はいくつかありますが、ユーザーのリソース制限もそのひとつです。

MySQLでは、5.7からユーザーのリソース制限が可能になりました。

myql> create user ユーザー名@ホスト with max_queries_per_hour 回数;

とすることで、1時間あたりのクエリー回数を制限できるのです。

myql> create user ユーザー名@ホスト with max_updates_per_hour 回数;

更新回数の制限です。

myql> create user ユーザー名@ホスト with max_connections_per_hour 回数;

接続回数の制限になります
このようにユーザーレベルでリソースへの挙動を制御することができ、上手に設定、運用することで深刻なリソース不足を回避できます。

まとめ

MySQLでのアクセス権限は、安易に行うと大変なトラブルを引き起こす原因になりかねません。本来、テーブル削除の権限を与えてはいけないユーザーに削除権限があった場合、重要なテーブルが削除され、取返しのつかない事態になる可能性があります。

リソース制限を含めて、ユーザーの管理には念を入れて設定を検討することをお勧めいたします。

CONTACT

製品・サービスに関するご質問、お見積もり、お問い合わせなど、お気軽にご連絡ください。

 050-5505-5509

受付時間 9:30 - 12:00, 13:00 - 17:00
(土日祝および年末年始を除く)