2

まず、これをグーグルで検索しましたが、サイトには「ホスト名がブロックされている」問題への対処方法に関するアドバイスが殺到しています。( https://www.google.com/search?q=mysql+block+a+host )。私の問題はそれとは少し反対です。

私と一緒に、MySQL データベースを実行しており、PHP は関与していません。

特定のホスト名/IP アドレスがデータベースに接続するのをブロックする必要があり、ブロックを解除します。MySQLデータベースで実行できる2つの簡単なクエリがあることを願っていますが、どこにも見つからないようです。

クエリを実行することでホスト名を簡単に見つけることができ、show processlist一度に 1 つのプロセスを強制終了できることはわかっていますが、非常に多くの新しいスレッドがポップアップするため、特定のホスト名からすべてのスレッドをブロックできれば理想的です。その後、いくつか修正したらブロックを解除します。

4

3 に答える 3

4

上記のように特権を取り消すことはできますが、これによりユーザーは MySQL サーバーに接続することができますが、そのユーザーは認証できなくなります。IPに基づいてMySQLサーバーへの接続を本当にブロック/許可したい場合は、iptablesを使用してください。

于 2013-07-12T19:05:49.480 に答える
3

GRANT を使用して、特定のホストから接続しているユーザーに非特権エントリを与えることができます。そのホストを含​​むワイルドカードに対して GRANT 特権を持っている場合でも同様です。認証時には、最も限定的なホストの一致が優先されます。

たとえば、ユーザーがローカル サブネット上のさまざまなホストから接続できるようにしたとします。

mysql> GRANT ALL PRIVILEGES ON *.* TO 'user'@'192.168.56.%' IDENTIFIED BY 'xyzzy';

次に、最小限のUSAGE 権限を付与できます。これは、そのサブネット内の 1 つの特定のホストに対して、そのユーザーに「権限がない」ことと同義です。

mysql> GRANT USAGE ON *.* TO 'user'@'192.168.56.110';

その後、そのホストから接続しようとすると、次のエラーが発生します。

$ mysql -uuser -pxyzzy
ERROR 1045 (28000): Access denied for user 'user'@'192.168.56.110' (using password: YES)

これがエラーになる理由は、パスワードのないユーザーに対してこの権限を付与したためです。パスワードを送信しようとすると、権限テーブルのエントリと一致しません。

ユーザーがパスワードを使用せずに接続しようとしても、何にもアクセスできないことがわかります。

$ mysql -uuser 
mysql> USE mydatabase;
ERROR 1044 (42000): Access denied for user 'user'@'192.168.56.110' to database 'mydatabase'

ブロックを元に戻すことができます:

mysql> DELETE FROM mysql.user WHERE host='192.168.56.110' AND user='user';
mysql> FLUSH PRIVILEGES; 

その後、IP 範囲が再び有効になり、ユーザーはそのホストから再び接続できるようになります。

于 2013-07-12T18:43:44.647 に答える
0

MySQL Workbenchを試してみましたか?
そこから特定のユーザー/ホストのロールを簡単に削除できます。

于 2013-07-12T18:39:59.090 に答える