我正在使用JDBC連接到PostgreSQL數據庫。我們試圖阻止用戶自己訪問數據庫;相反,他們應該被迫使用我們的前端。我們阻止了對任何表的訪問,並且只給出了爲用戶完成所有工作的過程,仍然沒有給他們任何直接訪問數據的機會。我們試圖阻止訪問架構pg_catalog,該架構將用戶限制爲我們創建的過程,但似乎JDBC需要這個訪問來調用任何過程。PostgreSQL應用程序訪問
無論如何,問題是如何使用JDBC而不訪問pg_catalog,或者如何僅授權由應用程序而不是用戶所做的連接。
我正在使用JDBC連接到PostgreSQL數據庫。我們試圖阻止用戶自己訪問數據庫;相反,他們應該被迫使用我們的前端。我們阻止了對任何表的訪問,並且只給出了爲用戶完成所有工作的過程,仍然沒有給他們任何直接訪問數據的機會。我們試圖阻止訪問架構pg_catalog,該架構將用戶限制爲我們創建的過程,但似乎JDBC需要這個訪問來調用任何過程。PostgreSQL應用程序訪問
無論如何,問題是如何使用JDBC而不訪問pg_catalog,或者如何僅授權由應用程序而不是用戶所做的連接。
沒有簡單的證明方法,但最簡單的方法是使用用戶名和密碼進行連接,但不提供給用戶。將密碼存儲在加密的配置文件中。當然,加密密鑰可以由智能人員從應用程序中檢索。
對於真正的保存系統,最好將服務放在處理所有安全性的數據庫之前,並提供高級API來訪問數據並讓客戶端連接到該數據庫。
那麼,只是不要給你的用戶在你的postgresql數據庫上的帳戶,並只爲你的應用程序創建一個postgresql帳戶。
我寧願不把憑據放在java文件中,即使我使用混淆器,它們也可以反編譯。此外,有關用戶在pg上的角色,對程序的訪問是有限的。 – Qbix 2011-05-20 10:59:27
的DBMS正在呈現左右爲難局面:
DBMS如何判斷兩個程序之間的差異?就它而言,它們都是使用正確協議與DBMS進行通信的客戶端,並且已將自己標識爲數據庫的合法用戶。
爲了使它工作,您必須找到一種不可變換的方式來區分兩個應用程序。這不是微不足道的 - 至少可以說。
有一些雜物,但沒有一個乾淨的解決方案。當問題出現在問題中時,任何DBMS都會面臨一個通用問題。
關於模糊密碼,請參閱http://security.stackexchange.com/questions/1711/storing-private-asymmetric-key-in-application-binary – AngerClown 2011-05-20 13:36:19