2012-08-03 109 views
0

數據庫評估MySQL用戶的主機是如何評估的?我的服務器試圖從myhostname連接到數據庫,但是即使我已經在/etc/hostname中設置了該服務器的主機名,但它仍然失敗,但它在我使用IP時起作用。MySQL用戶主機網絡

用戶創建像這樣:

GRANT ALL ON db.* TO 'dude'@'myhostname'; 
+0

'/ etc/hostname'是針對本地機器的,將myhostname添加到'/ etc/hosts'以繞過DNS的查找IP – lynks 2012-08-03 10:39:51

+0

您完成了'FLUSH PRIVILEGES'嗎? – Omesh 2012-08-03 10:41:13

回答

3

MySQL的錯誤會告訴你服務器計算機認爲您的用戶從連接的主機名。根據DNS設置,這可能是也可能不是客戶認爲分配給自己的主機名。從服務器看到的名稱是您需要在您的GRANT聲明中設置的名稱。我想知道服務器授予Alice的特權,我有主機Bob,因爲它是我的主機,所以我可以改名爲Alice,如果這樣做給了我Alice的權限,整個GRANT計劃將是完全不安全的!會發生什麼是我的主機認爲它是愛麗絲,但服務器看到我的IP,問DNS「這是誰?」,並收到「他是鮑勃」我仍然可以竊取愛麗絲的特權,但我需要以某種方式compromise the DNS records

在捏,將客戶端IP和主機名添加到服務器/etc/hosts文件。然而,這是一個黑客攻擊,而正確的DNS設置是一條可行的路線:一個被遺忘的hosts黑客可能會花費你很長時間在頭上搔抓幾個月。

1

由於從MySQL手冊中DNS Lookup Optimization and the Host Cache解釋說:

服務器執行使用線程安全gethostbyaddr_r()gethostbyname_r()調用操作系統是否支持這些主機名解析。否則,執行查找的線程會鎖定互斥鎖,並調用gethostbyaddr()gethostbyname()

因此,連接IP到myhostname的解決方案是操作系統而不是MySQL的問題。您應該首先確定您的操作系統正確解析客戶端IP,如果沒有,則調試您的操作系統或名稱服務配置(有關此主題的問題可能更適合Super UserSever Fault,而不是StackOverflow)。