2011-12-07 109 views
4

訪問MySQL數據庫我寫在Java的應用程序,我想,以使其能夠訪問mysql的遠程服務器。 我的問題是,如果應用程序擁有用戶名和密碼的人可以把他們和使用我的數據庫有不同的軟件。 有沒有辦法阻止它?防止未經授權的軟件

UPDATE

我發現this解決方法用於從一個機器人設備連接到遠程MySQL數據庫。 你把服務放在中間。就像一個PHP頁面,用JSON格式編碼數據,android應用程序通過http獲取數據。 這裏是我找到的示例: Connecting to MySQL database

+0

你的意思是,應用程序保存的硬編碼數據庫憑據? – AlexR

+0

是的,如果我使用hibernate,那麼這些是在hibernate.cfg.xml文件中定義的 – yossi

回答

4

具有用戶名和密碼是專門授予對數據庫的訪問。這就是整個問題。

您可能會花費一些額外的時間來限制與特定主機的數據庫連接,因此至少您的付費客戶可以訪問數據庫,而其他人無法訪問數據庫,但您的客戶可能選擇使用不同的軟件訪問數據庫。除了授權條款外,沒有辦法解決它。

可能 do是在您自己的硬件上運行一箇中間程序,該程序連接到數據庫並將訪問數據庫的權限限制在直接管理控制下的軟件中。您的程序將在您的客戶的控制下驗證來自軟件的所有請求,並允許您允許並拒絕(並記錄)您不必查詢的查詢。 (您不需要發送原始SQL數據 - 您可以對數據和查詢執行任何數量的處理。)

0

您可以在應用程序服務器上設置JDBC數據源。 Here您可以看到Oracle Glassfish的示例。

所以,你的證書將不會在您的代碼/資源使用。

+0

據我所知,通過JNDI公開的jdbc連接不會遠程(當前JVM之外)可用。 – jatanp

+0

你說得對。但是我從作者的帖子中看不到這樣的問題(使用來自其他JVM的連接)。 – Artem

0

如果你說你有一個應用程序試圖遠程訪問MySQL的(不是在同一個盒子),那麼我認爲你不用擔心,因爲這會被你的應用程序代碼來建立連接不會暴露用戶名和密碼,當它試圖認證並授權給MySQL服務器時。

+0

它不會,但信息存儲在軟件內,所以如果有人想要他可以提取該信息,尤其是因爲Java是一種解釋型語言 – yossi

+0

很多時候這是一個問題,應用程序的配置XML中有大量的祕密信息。我也想聽聽有什麼選擇。:D –

0

您可以限制對MySQL服務器的訪問,以便僅限某些IP地址或IP範圍有權訪問它。

作爲便箋,請確保您在應用程序中使用的用戶僅具有所需的數據庫權限。例如,用戶可能不需要能夠創建或刪除表格。您甚至可以在表和列級別爲用戶指定權限。

+0

,不會幫助,因爲我不知道從哪個IP的服務器將被訪問。 – yossi