我们正在运行PostgreSQL 8.3作为ERP系统的数据库服务器。到目前为止,没有必要在postgres中根据不同的用户(8.3中的角色)创建不同的数据库。现在它出现了。
问题1:具有 no 超级用户权限的用户是否只能读取/写入其拥有的数据库(假设用户具有CREATEDB权限)是否正确?< / p>
问题2:如何通过psql -l
命令禁用用户列出所有数据库?即使第一个问题的答案是肯定的,那么这个列表仍可供任意用户使用。
谢谢。
答案 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