2011-05-20 110 views
1

我正在使用JDBC連接到PostgreSQL數據庫。我們試圖阻止用戶自己訪問數據庫;相反,他們應該被迫使用我們的前端。我們阻止了對任何表的訪問,並且只給出了爲用戶完成所有工作的過程,仍然沒有給他們任何直接訪問數據的機會。我們試圖阻止訪問架構pg_catalog,該架構將用戶限制爲我們創建的過程,但似乎JDBC需要這個訪問來調用任何過程。PostgreSQL應用程序訪問

無論如何,問題是如何使用JDBC而不訪問pg_catalog,或者如何僅授權由應用程序而不是用戶所做的連接。

回答

2

沒有簡單的證明方法,但最簡單的方法是使用用戶名和密碼進行連接,但不提供給用戶。將密碼存儲在加密的配置文件中。當然,加密密鑰可以由智能人員從應用程序中檢索。

對於真正的保存系統,最好將服務放在處理所有安全性的數據庫之前,並提供高級API來訪問數據並讓客戶端連接到該數據庫。

+0

關於模糊密碼,請參閱http://security.stackexchange.com/questions/1711/storing-private-asymmetric-key-in-application-binary – AngerClown 2011-05-20 13:36:19

0

那麼,只是不要給你的用戶在你的postgresql數據庫上的帳戶,並只爲你的應用程序創建一個postgresql帳戶。

+0

我寧願不把憑據放在java文件中,即使我使用混淆器,它們也可以反編譯。此外,有關用戶在pg上的角色,對程序的訪問是有限的。 – Qbix 2011-05-20 10:59:27

1

的DBMS正在呈現左右爲難局面:

  • 當用戶運行特定的程序JDBC訪問數據庫,讓它做它的東西。
  • 當用戶運行任何其他JDBC程序來訪問數據庫時,不要讓它做它的東西。

DBMS如何判斷兩個程序之間的差異?就它而言,它們都是使用正確協議與DBMS進行通信的客戶端,並且已將自己標識爲數據庫的合法用戶。

爲了使它工作,您必須找到一種不可變換的方式來區分兩個應用程序。這不是微不足道的 - 至少可以說。

有一些雜物,但沒有一個乾淨的解決方案。當問題出現在問題中時,任何DBMS都會面臨一個通用問題。