2011-05-20 79 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都会面临一个通用问题。