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 範囲が再び有効になり、ユーザーはそのホストから再び接続できるようになります。