如何為具有動態 IP 的使用者設置 MySQL 遠端主機 IP 地址
背景
我需要從我的 Delphi PC 應用程序遠端訪問託管在我的 ISP 的共享伺服器上的 MySQL 數據庫。該數據庫不與任何網站相關聯。我的 ISP 帳戶上只有數據庫。
我的應用程序在他們自己家中的六台使用者機器上執行。為了給我的使用者訪問權限,我必須在 cpanel 中設置遠端主機。一些使用者具有動態 IP 地址。因為他們的 IP 地址可能會改變,所以我在我的應用程序中使用 IdHTTP 編寫了程式碼,該程式碼獲取使用者的 IP,登錄到我的 ISP,導航到遠端主機頁面,檢查該 IP 是否存在,如果不存在則添加它,然後刪除它使用者使用的最後一個 IP 地址。工作,但相當複雜。
我知道我可以將萬用字元 %.%.%.% 放在遠端主機中,讓生活更簡單
問題
有些文章說這是不安全的,我可以理解,但有那麼不安全嗎?
畢竟,任何試圖破解我的數據庫的人都必須
- 知道我的 ISP 帳戶的使用者名和密碼
- 知道那裡有一個數據庫
- 知道數據庫的名字
- 知道允許的數據庫使用者之一的使用者名和密碼
如果他們知道這麼多,那麼限制 IP 地址似乎毫無用處。
更多資訊
我已經在此處、此處、此處和此處閱讀了這些文章,並指出這是一個共享託管站點,因此我無法訪問系統文件或重新啟動 MySql 或發出大多數管理命令,例如 GRANT ALL ON 等
我的問題的原因是 ISP 最近將他們的 cpanel 軟體從 Paper_Lantern 更改為 Jupiter,這當然更改了遠端主機頁面的 URL,破壞了我的應用程序並要求我修復程式碼以指向新的 URL。因此,我正在尋找一種無需導航到遠端主機頁面的方法。
根據以上評論中的討論回答:
我建議對整個 Internet 使用萬用字元,而不是 ‘%’,但至少將其縮小到每個使用者的 ISP。即使他們的 IP 地址是動態的,它也應該在他們的 ISP 擁有的子網內,因此您可以從“123.45.%”之類的模式授予訪問權限(這只是假設 ISP 擁有 B 類網路的範例),並且將阻止 99.998% 的網際網路,但允許來自該使用者的 ISP 的任何客戶端。
另一方面,我認為將 MySQL 實例的直接訪問權限授予遠端 IP 地址通常是不安全的。如果是我,我會為 API 服務開發程式碼,並將客戶端應用程序設計為僅通過 http 請求請求規定的操作。API 服務將連接到 MySQL 並為它們執行此操作。因此,連接到 MySQL 的將是您的 API 服務,而不是您的使用者,並且授權只需要允許您的服務執行所在的 IP 地址。這是大多數 Web 服務的設計方式,但我從您的評論中了解到,這將是對您的應用程序的重大重新設計,並且您傾向於允許直接 MySQL 連接並在客戶端應用程序中實現 SQL。
我希望您至少使用從客戶端應用程序到 MySQL 實例的 SSL 連接,否則任何人(不僅僅是您的使用者)都可以執行數據包嗅探工具來了解有關您的查詢和表的各種資訊。
無論如何,通過對 IP 範圍使用萬用字元,您只需在使用者來或去或更改 ISP 時更改授權。此外,一些 ISP 可能擁有多個子網。給定使用者可能會獲得與您授予訪問權限的模式不匹配的不同 IP 地址。
底線是在簡單性、靈活性和安全性之間進行權衡。沒有解決方案可以提供所有這三個。