您可以使用 GRANT 为从特定主机连接的用户提供非特权条目,即使您对包括该主机的通配符具有 GRANTed 特权。进行身份验证时,最具体的主机匹配优先。
例如,假设您允许用户从本地子网上的一系列主机进行连接:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'user'@'192.168.56.%' IDENTIFIED BY 'xyzzy';
然后您可以授予minimum USAGE privilege ,这是该用户对该子网中一个特定主机的“无权限”的同义词:
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 范围将重新生效,用户将能够再次从该主机连接。