在不拥有的角色数据库上禁用所有操作(包括使用psql -l列出)?

时间:2011-02-13 13:45:33

标签: postgresql database-permissions

我们正在运行PostgreSQL 8.3作为ERP系统的数据库服务器。到目前为止,没有必要在postgres中根据不同的用户(8.3中的角色)创建不同的数据库。现在它出现了。

问题1:具有 no 超级用户权限的用户是否只能读取/写入其拥有的数据库(假设用户具有CREATEDB权限)是否正确?< / p>

问题2:如何通过psql -l命令禁用用户列出所有数据库?即使第一个问题的答案是肯定的,那么这个列表仍可供任意用户使用。

谢谢。

4 个答案:

答案 0 :(得分:3)

没有办法在没有破坏的情况下关闭psql -l。您可以在pg_hba.conf中使用sameuser配置选项,只允许用户连接到自己的数据库。

答案 1 :(得分:2)

重新1)是的,这是正确的

重新2)我认为可以使用revoke select on pg_database from public来完成,但我不确定会产生什么样的副作用。

修改
这个讨论对你来说可能很有趣:
http://www.mail-archive.com/pgsql-general@postgresql.org/msg64005.html

答案 2 :(得分:2)

Q1:不会。这一切都受到各级特权的控制。要写入表,您需要该表的权限等。数据库级别(所有者默认拥有)的唯一权限是能够创建模式和临时表。这可能不是你想到的。你可以这样设置它,但它远离默认设置或正常设置。

Q2:您可以撤销SELECT上的pg_database权限。但这样做并没有真正支持。我建议你重新考虑一下你是否真的需要它。

答案 3 :(得分:2)

http://wiki.postgresql.org/wiki/Shared_Database_Hosting

Postgres 8.4

主要案例

  

我们修改template1以撤销从“PUBLIC”到公共模式的所有权限,以防止其他客户访问不同客户数据库的公共模式。

psql -U postgres template1 -f - << EOT

REVOKE ALL ON DATABASE template1 FROM public;
REVOKE ALL ON SCHEMA public FROM public;
GRANT ALL ON SCHEMA public TO postgres;
CREATE LANGUAGE plpgsql;
EOT