MySQL 4.0.2 以降、特定のリソースをユーザごとに制限できるようになりました。
今までは、MySQL
サーバリソースの使用を制限するには、スタートアップ変数の
max_user_connections
をゼロ以外の値に設定するしかありませんでした。しかしこの方法はグローバルに適用されるため、インターネットサービスプロバイダが関心のある個別ユーザの管理には使用できませんでした。
そのため、個別ユーザレベルで 3 つのリソースを管理する方法が導入されました。
時間単位の全クエリ数: 1 ユーザが実行できるクエリ。
時間単位の全更新数: テーブルまたはデータベースを変更するクエリ。
時間単位の接続数: 1 時間に新しく開かれる接続。
上記コンテキストの 1 ユーザとは
user
テーブルの 1
エントリです。このエントリは
user
カラムと host
カラムによって識別されます。
制限を設定しない限り、すべてのユーザはデフォルトで、上記リソースを制限なく使用できます。これらの制限は、以下の構文を使用してグローバルな
GRANT (*.*)
でのみ設定できます。
GRANT ... WITH MAX_QUERIES_PER_HOUR N1 MAX_UPDATES_PER_HOUR N2 MAX_CONNECTIONS_PER_HOUR N3;
上記のリソースはどのような組み合わせでも指定可能です。
N1
、N2
、および
N3
は整数で、時間単位のカウント数を表します。
ユーザが時間単位の接続数に達すると、その 1 時間が経過するまで、以降の接続は拒否されます。同様に、ユーザがクエリまたは更新の制限回数に達すると、その 1 時間が経過するまで、以降のクエリまたは更新は拒否されます。いずれの場合も、適切なエラーメッセージが表示されます。
特定ユーザの現在の使用値をフラッシュ(ゼロに設定)するには、上記の任意の節の
GRANT
ステートメントを発行します。その際
GRANT
ステートメントの値を現在の値にします。
また、すべてのユーザの現在の値をフラッシュするには、権限を再読み込みするか(サーバ内部で行うか、mysqladmin
reload
を使用)、FLUSH
USER_RESOURCES
コマンドを実行します。
リソース制限機能は、単一ユーザにリソースを制限する
GRANT
節が設定されるとすぐに有効になります。
この機能を有効化する前提条件として、scripts
サブディレクトリにあるテーブル作成スクリプト
mysql_install_db
および
mysql_install_db.sh
で定義されている追加カラムが、mysql
データベースの user
テーブルに含まれていることが必要です。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.