1

我正在开发一个将使用 postgreSQL 数据库后端的应用程序。我想防止用户看到一些 db 对象 - 特别是存储的 procs 实现等。

“显而易见”(但可能是错误的)方法是将数据库的 CRUD 访问权限授予将具有加密 uname/pwd 的特定用户?

还有另一种方法吗?

注意:我的目标受众主要是非程序员,所以我不需要任何“牢不可破”的东西(假设存在这样的东西)。

4

1 回答 1

1

PostgreSQL 并不真正支持限制过程源代码、用户或数据库列表等的可见性。最好的做法是接受这一点,或者在 C 或 PL/Java 中实现该过程,在这种情况下,检查起来有点困难,代价是相当大的实现的复杂性更大。

一般来说,您不应该让数据库/表所有者成为数据库的日常操作用户。创建一个新用户,GRANT它只有它需要的权限。

大多数系统目录都SELECT授予了默认权限,public因此您确实想要限制访问权限,您需要明确REVOKE该访问权限,然后GRANT将其返回给数据库所有者和任何其他应该拥有它的用户。pg_proc例如,如果您想限制对过程源的访问,您可能希望限制访问。这种方法是有限且脆弱的(root 始终可以获得 PostgreSQL 超级用户访问权限,并从那里做任何事情),但您已经说过这可能适合您的目的。

不真正支持弄乱系统目录,并且可能会导致 JDBC、psql 等中的元数据访问出现问题。请参阅此相关答案。如果你弄乱了目录并且有东西坏了,你可以保留这些碎片。

BTW,如果您修改目录,请尽量避免在此处询问有关手动修改目录的数据库的问题。至少要非常清楚地说明你弄乱了系统目录以及你做了什么如果可能,请先在未修改的数据库上重现该问题。

于 2012-10-30T11:52:33.390 回答