2013-02-20 54 views
3

我正在構建一個由MySQL服務器支持的Django支持的站點。這個MySQL服務器將從除網站以外的其他來源訪問,以讀取和寫入表格數據;例如用戶在本地運行的連接到數據庫的程序。Django作爲mysql代理服務器?

當前在本地運行的程序使用MySQL/C連接器庫直接連接到sql服務器並執行查詢。在對公衆的最終版本中,這似乎是不安全的,因爲我會在代碼或配置文件中將連接字符串暴露給數據庫。

我正在考慮的一種替代方法是將所有查詢發送到Django網站(使用用戶的登錄名和密碼進行身份驗證),然後該站點將代表用戶清理並執行查詢,並將結果返回給他們。

這有很多缺點,我可以想到。通過處理所有的SQL查詢,網絡服務器將承受更大的負載,這可能會超出我的主機的限制。此外,我將不得不找出一些序列化和傳輸Python結果的方式,然後在客戶端使用C/C++進行反序列化。這將是一個不錯的自定義代碼來編寫和維護。

人們可以想到的這種方法的其他缺點?

這聽起來是否合理,如果有的話,任何可以緩解工作的東西;如Python或C庫來幫助開發代理接口?

如果聽起來像一個壞主意,任何替代解決方案的建議,即專門研究這種代理sql服務器邏輯的Python庫,加密sql連接字符串的方法,以便我可以安全地使用我當前的解決方案等。 ..?

最後,這是一個有效的關注嗎?這個數據庫目前並不包含任何關於用戶的非常敏感的信息(最敏感的是他們的電子郵件和他們可能從其他來源重複使用的網站密碼),但如果它不安全,它可能會在未來引起我的關注。

回答

1

這是一個完全有效的關注和一個非常普遍的問題。你已經描述過創建一個RESTful API。我猜它可能被認爲是數據庫的代理,但通常不被稱爲代理。

Django是一個很棒的工具,可以用來完成這個任務。 Django甚至有幾個包可以幫助快速開發,Django REST Framework,Tastiepy和django-piston是最受歡迎的。當然,你可以使用簡單的舊Django。

您的Django項目將是唯一與數據庫接口的客戶端,客戶端可以向Django發送已驗證的請求;所以客戶永遠不會直接連接到您的數據庫。這將爲您提供每個客戶端的精細權限控制,每個資源基礎。

的Web服務器將是一個更大的負荷下通過處理所有 SQL查詢,這可能會超出我的主機的限制

相信縮放web服務將是一個容易得多然後擴展您的客戶端到數據庫的直接連接。有許多經過驗證的真正方法可用於擴展每秒向數據庫發出數百次請求的應用程序。因爲你和Django之間有Django,你可以爲頻繁請求的資源實現緩存。

此外,我必須弄清楚在客戶端序列化和 傳輸Python中的SQL結果,然後在 C/C反序列化他們++

這應該是一個有爭議的問題的一些方法問題。有很多非常流行的數據交換格式。我從來沒有使用C/C++,但快速搜索,我看到了一些C/C + + json串行器。 python有JSON免費內置,如果您使用預先製作的C/C++ JSON庫,則不應該有任何自定義代碼來維護。

人們可以想到的這種方法的其他缺點?

我不認爲有任何缺點,這是一個久經考驗的方法。它已被證明了十年,並在世界上最流行的網站暴露自己通過RESTful API中

這聽起來是合理的,如果是這樣,任何可以緩解 它的工作;如Python或C庫,以幫助開發代理 界面?

這聽起來很合理,我在答案的開頭提到的Django應用程序應該提供一些鍋爐板,以便您可以更快地開始使用API​​。

+0

感謝您的意見,我會研究如何使其適用於我的情況。 – Alex 2013-02-21 16:00:58