2

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

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

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

谢谢你。

4

4 回答 4

3

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

于 2011-02-14T07:00:14.077 回答
2

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

re 2)我认为可以通过使用来完成,revoke select on pg_database from public但我不确定会有什么副作用。

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

于 2011-02-13T14:28:26.100 回答
2

Q1:不,这都是由不同级别的权限控制的。要写入表,您需要对该表的权限等。数据库级别的唯一权限(所有者默认拥有)是创建模式和临时表的能力。这可能不是你的想法。您可能可以这样设置它,但它与默认或正常设置相去甚远。

Q2 :您可以撤销SELECT. pg_database但这样做并没有真正支持。我建议你重新考虑你是否真的需要那个。

于 2011-02-13T14:33:41.367 回答
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
于 2013-05-01T11:05:29.143 回答