2011-11-28 67 views
0

我正在開發一個小型應用程序,該應用程序將用作使用MySQL作爲後端數據庫的Web應用程序的查看器(排序儀表板)。該應用程序將只做SELECT,沒有INSERT或UPDATE或任何改變數據的東西。我知道構建此應用程序的首選方法是創建一個可訪問數據庫的Web服務,然後讓客戶端應用程序調用Web服務。這樣你可以真正保護你的MySQL數據庫只允許本地主機訪問。實際上如何不安全地直接從應用程序訪問MySQL?

另一方面,擁有Web服務會提高應用程序所需的複雜性和資源。我不僅需要編寫這個過程兩次,我必須編寫兩套測試套件和集成測試,並且由於客戶端是用.net c#編寫的,而在php的後端,我必須開發某種交換格式並保留在整個開發過程中在兩種語言和IDE之間切換。

我可能會寫這個服務,但是我想知道的是那裏的體驗是什麼?我瘋狂地考慮直接從客戶端訪問MySQL,或者甲骨文的優秀工程師爲保護他們的數據庫做了不錯的工作,至少對於只有讀權限的用戶來說。

+1

通常可以這樣做。創建MySql用戶並賦予它們對錶的特定權限,並僅允許他們選擇。讓人們使用他們的MySql用戶登錄。我也不明白爲什麼不。 – sinni800

+0

數以百萬計的PHP網頁直接從視圖中訪問MySQL(=單個PHP腳本來完成創建HTML的全部內容) – CodeZombie

+0

如果您的應用中只有有限的讀取查詢類型,我會堅持使用只是因爲它比較容易編寫,比如5個查詢以json/csv或其他方式返回數據,不需要外部php庫,沒有IDE等等。否則,我會遠程連接,但如果我沒有任何東西隱藏在數據庫中(表格列未在應用程序中使用)。 – ashein

回答

1

如果使用直接訪問MySQL數據庫只是選擇表的用戶,您將需要一個只有正確的權限訪問,以確保訪問安全的用戶。

但是您需要記住,如果您打開數據庫端口進行外部訪問,則數據庫中的任何安全失敗都將被公開。

如果您需要其他規則(例如特性選擇),只需從用戶選擇組訪問權限,則需要在數據庫中編寫讀取parans的過程,並記住如果某個用戶利用您的應用程序,他將能夠通過其他parans查詢您的數據庫。

不僅是oracle或mysql,所有數據庫都有很多安全選項可以提供外部訪問,但要用於複雜的應用程序比構建服務層以確保安全訪問更困難。

並且在默認情況下,您在直接SQL查詢諮詢中沒有crypt通信。

1

只要確保它從數據庫中獲取數據的用戶沒有權限執行任何不需要的操作,如刪除表。

具有隻讀權限應該做的伎倆

+1

有趣的是,我沒有提到在將它傳遞給MySQL之前沒有信任用戶輸入並正確轉義它...即使用戶只能執行SELECT,也可能不希望他們從數據庫中「選擇」任意數據通過SQL注入... – Romain

+0

MySQL的ADO.Net驅動程序有一個相當不錯的系統,它將參數傳遞給在作爲查詢執行之前進行驗證的命令。我發現的東西比使用mysqli界面和所有這些更適合使用????????????和「ssiissdd」的東西。 –

相關問題