我正在开发一个应用程序,它将使用postgreSQL数据库后端。我想防止用户看到一些数据库对象,特别是存储过程的实现等。
“显而易见”(但可能是错误的)的方法是将CRUD访问数据库的权限授予具有加密uname/pwd的特定用户?
还有别的办法吗?.
注:我的目标受众主要是非程序员,所以我不需要任何“牢不可破”的东西(假设存在这样的事情)。

最佳答案

PostgreSQL并不真正支持过程源代码、用户或数据库列表等的可见性限制。最好的做法是接受它,或者在C或PL/Java中实现该过程,以相当大的复杂度为代价进行检查比较困难。
一般来说,数据库/表所有者不应该是数据库的日常操作用户。创建一个新用户,并仅使用它所需的权限。
大多数系统目录都有默认的GRANT权限授予SELECT,因此您确实希望限制访问,您需要显式地public该访问,然后REVOKE将其返回给数据库所有者和任何其他应该拥有它的用户。例如,如果要限制对过程源的访问,则可能需要限制对GRANT的访问。这种方法是有限和脆弱的(root总是可以获得PostgreSQL超级用户访问权,从那里可以做任何事情),但您已经说过,这可能对您的目的是可以的。
实际上不支持对系统目录进行修改,这可能会导致JDBC、psql等中的元数据访问出现问题。请参见this related answer。如果你把目录弄乱了,有什么东西坏了,你就得保留这些东西。
顺便说一下,如果您修改了目录,请尽量避免在这里询问有关手动修改目录的数据库的问题。至少要非常清楚地说明你已经搞乱了系统目录,以及你到底做了什么。如果可能,请先在未修改的数据库上重现该问题。

关于security - PostgreSQL数据库对象的安全性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13138350/

10-11 03:22
查看更多