2012-01-08 64 views
3

我在大壞的互聯網中有一臺服務器,我想在我的家庭系統上運行一個mysql客戶端以連接到它。出於明顯的安全原因,我希望MySql服務器只允許我的IP地址連接。我有一個dyndns.org帳戶,可以跟蹤我目前的IP地址。 Comcast可以隨時更改我的IP地址。如何在MySQL用戶名中使用動態DNS名稱?

,所以我創建這樣一個用戶:

CREATE USER 'user'@'mememe.dyndns.org' IDENTIFIED BY 'changeme'; 
GRANT ALL PRIVILEGES ON mydata TO 'user'@'mememe.dyndns.org'; 

所以,當我試圖從我的家庭系統連接到該服務器,我得到:

ERROR 1130 (HY000): Host 'c-98-234-122-18.hsd1.ca.comcast.net' is not allowed to connect to this MySQL server 

當然的主機名,MySQL的看是IP地址的RDNS查找是什麼。我想要的是讓它識別dyndns.org名稱。有沒有辦法做到這一點?

如果沒有辦法做到這一點,這是否意味着我被迫使用通配符或特定IP地址創建用戶名?

回答

3

問題是,comcast主機名是該IP的規範反向查找名稱,而不是您的DynDNS之一。你想做的事可能根本不可能在MySQL中完成。但是,如果你有自己的服務器,那麼從另一個角度解決這個問題 - 允許來自mySQL內的任何IP的連接,但是使用服務器的防火牆來執行基於IP的過濾?一個成熟的防火牆產品可能有更多的可能性來解決這個問題。例如,

This blog post顯示了一種從動態DNS主機更新iptables記錄的方法。也許這是一個開始。否則,諸如「Linux Firewall Dyndns」或「iptables dyndns」等搜索查詢可能會提出解決方案。

關於這個問題,也許值得詢問關於Serverfault的單獨問題。

+0

我想過使用iptables過濾器,但我想確保沒有一個「純粹的MySQL」的方式來做到這一點。我對mysql還不是很有經驗,所以不要浪費時間去實現一個不可能的解決方案。 – AlanObject 2012-01-08 19:11:19

+0

@Alan是啊。我不是一個mySQL大師,但我確信沒有辦法做到這一點 - mySQL的IP過濾非常非常基本,可能是故意的。 iptables聽起來像是要走的路。 – 2012-01-08 19:13:14

4

你想達到什麼是不可能嚴格,考慮事件流

  1. 用戶連接到MySQL
  2. MySQL的解析IP連接到主機名(c-98-234-122-18.hsd1.ca .comcast.net)
  3. 的MySQL查找這個(用戶,主機名)的權限
  4. 元組

在任何時候確實曾經的MySQL查詢 'mememe.dyndns.org'。

+0

這是令人失望的,但一個非常有用的數據點。如果我知道這是我自己能夠自己回答這個問題的邏輯。 – AlanObject 2012-01-08 19:09:04