1

Windows Server 2008 プラットフォームで MySQL Community Server 5.5 と PHP 5.3.3 を使用しています。ユーザーごとのリソース制限、特に DB ユーザーが 1 時間以内に実行するクエリに関連する制限を設定しました。私はこのドキュメントを読みましたが、とても興味深いのですが、いつもうまくいきません。

http://dev.mysql.com/doc/refman/5.5/en/user-resources.html

mysql コマンド ライン ツール (mysql.exe) を介してクエリを実行すると、制限が適切に機能し、1 時間あたりのクエリ制限が 7 の場合、1 時間以内に 7 つのクエリを実行すると、次のエラーが表示されます。

エラー 1226 (42000): ユーザー 'user' が 'max_questions' リソースを超えました (現在の値: 7)

これは上記の望ましい動作です。

PHP経由でクエリを実行すると(DBへの接続に使用したユーザーは上記と同じです)、クエリの制限は機能しません.phpを介した同じユーザーは、必要なすべてのクエリを無制限に実行できます。そして、mysql コマンド ラインに戻ると、カウンターがリセットされているように見えます (1 時間が経過していなくても)。1 時間以内に 7 つのクエリを実行することもできます。これは望ましい動作ではないと思います。PHP がカウンターをリセットし、クエリ制限をトリガーしていないようです。

PS: 「ユーザー」はSELECT,INSERT,UPDATE,DELETE特権のみを所有し、PHP コードにはFLUSH USER_RESOURCES、ユーザー「ユーザー」が実行できなかった SQL コードはありません (RELOAD特権がユーザーに割り当てられていないため)。

前もって感謝します

4

3 に答える 3

1

このヒントを確認して、

mysql に同じ名前のユーザーが何人いますか..(名前だけでなく、ユーザーの接続が許可されているホストが mysql で指定されていることを覚えておいてください)。**非常に重要です。

user@%
user@127.0.0.1
user@localhost
user@172.35.20.12

それらのそれぞれは同じではありません。使用したい制限ルールがある場合は、制限が必要な場所で user@ に制限を割り当てる必要があります。(それらすべて、問題がある場合**あなたのケースだと思います)。

推奨事項: WEB PHP 用に特定のユーザーを作成します (user@host は 1 つだけ作成する必要があります)。代わりに、複数の users@hosts が割り当てられている可能性がある汎用ユーザーを使用します。phpuser@'localhost' のように、通常は十分です。

于 2012-04-15T22:28:58.720 に答える
0

私は(部分的に)問題を解決しました。

この問題は、MAX_QUERIES_PER_HOURコンポーネントを含むクエリに、0とは異なる次の要素のいずれかが含まれている場合にのみ発生します。

MAX_CONNECTIONS_PER_HOUR !=0
MAX_USER_CONNECTIONS !=0;

たとえば、次の付与クエリによって、PHPでのクエリ制限の達成に関連するエラーメッセージが表示されることはありません。

GRANT USAGE ON *.* TO 'user'@'localhost'
WITH MAX_QUERIES_PER_HOUR 20
MAX_UPDATES_PER_HOUR 10
MAX_CONNECTIONS_PER_HOUR 5
MAX_USER_CONNECTIONS 2;

代わりに、次の付与は正しく機能し、MySQLは制限を正しく適用します。

GRANT USAGE ON *.* TO 'user'@'localhost'
    WITH MAX_QUERIES_PER_HOUR 20
    MAX_UPDATES_PER_HOUR 10
    MAX_CONNECTIONS_PER_HOUR 0
    MAX_USER_CONNECTIONS 0;

つまり、クエリ設定クエリ制限に0以外のコンポーネントMAX_CONNECTIONS_PER_HOURとMAX_USER_CONNECTIONSのいずれかが含まれている場合、MAX_QUERIES_PER_HOURとMAX_UPDATES_PER_HOURに関連する制限は無視されます。つまり、PHPページは必要なすべてのクエリを実行できます。そうでなければ、制限が理解され、メッセージが表示されます

'max_questions'リソースを超えました

クエリ制限達成イベントが発生すると、正しく表示されます。

上で述べたように、mysqlコマンドラインツールを使用しても問題は発生しません。これは、クエリがPHPページを介して実行される場合にのみ発生します。

于 2011-02-09T14:36:37.407 に答える
0

私はあなたが小さな間違いをしていると思います、

php への mysql_connect 関数でホストを確認してください。ホストが IP アドレスの場合、リソース制限を username@yourip または username@% に割り当てる必要があります。

コマンドラインから実行している場合は、username@localhost からログインしており、同じユーザーに制限を割り当てています。

上記のトリックを試してみて、まだ問題がある場合はお知らせください。

幸せなコーディング....

于 2011-02-09T10:27:22.717 に答える