即使您已將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重新連接。