2013-07-12 51 views
1

首先,我做了谷歌,但網站充斥着關於如何處理「主機名被阻止」問題的建議。 (https://www.google.com/search?q=mysql+block+a+host)。我的問題與此相反。如何手動阻止然後解除阻止MYSQL中的特定IP /主機名稱

與我一起,我正在運行一個MySQL數據庫,並沒有涉及PHP。

我需要阻止連接到我的數據庫的某個主機名/ IP地址,然後我將取消阻止它。我希望有2個簡單的查詢可以在MySQL數據庫上執行,我似乎無法在任何地方找到它。

我可以通過運行show processlist查詢很容易地找到主機名,我知道我可以一次殺死一個進程,但是會彈出很多新線程,如果我可以從某個特定的主機名中阻止所有這些進程,那將是理想的。然後,我會解決一些問題後解鎖。

回答

0

您是否試過使用MySQL Workbench
您可以從那裏簡單地刪除特定用戶/主機的ROLES。

1

即使您已將GRANT特權授予包括該主機的通配符,也可以使用GRANT爲特定主機連接的用戶授予非特權條目。在進行身份驗證時,最具體的主機匹配優先。

例如,假設您啓用了用戶從主機中連接上你的本地子網:

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

然後,你可以授予最小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範圍會回來生效,用戶將能夠從thathost重新連接。

3

如上所述,您可以撤銷特權,但這仍然允許用戶連接到您的MySQL服務器 - 儘管這會阻止該用戶進行身份驗證。如果您真的想阻止/允許基於IP的MySQL服務器連接,請使用iptables。