2

首先,我在谷歌上搜索过,但网站上充斥着关于如何处理“主机名被阻止”问题的建议。(https://www.google.com/search?q=mysql+block+a+host)。我的问题与此相反。

对我来说,我正在运行一个 MySQL 数据库,并且不涉及 PHP。

我需要阻止某个主机名/IP 地址连接到我的数据库,然后我将取消阻止它。我希望有两个简单的查询可以在 MySQL 数据库上执行,但我似乎无法在任何地方找到它。

通过运行查询,我可以很容易地找到主机名,show processlist而且我知道我可以一次杀死一个进程,但是会弹出很多新线程,如果我可以阻止所有这些线程来自某个主机名,那将是理想的。然后,一旦我解决了一些问题,我就会解除封锁。

4

3 回答 3

4

您可以如上所述撤销权限,但这仍然允许用户连接到您的 MySQL 服务器 - 尽管这会阻止该用户进行身份验证。如果您真的想阻止/允许基于 IP 的 MySQL 服务器连接,请使用 iptables。

于 2013-07-12T19:05:49.480 回答
3

您可以使用 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 范围将重新生效,用户将能够再次从该主机连接。

于 2013-07-12T18:43:44.647 回答
0

你试过使用MySQL Workbench吗?
您可以从那里简单地删除特定用户/主机的角色。

于 2013-07-12T18:39:59.090 回答