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

发布于 2024-10-16 23:34:58 字数 264 浏览 0 评论 0原文

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

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

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

谢谢。

We are running PostgreSQL 8.3 as the DB server for our ERP system. So far there was no necessity to create different databases under different users (roles in terms of 8.3) in postgres. And now it has appeared.

Question 1: Is it correct that a user with no superuser privilege can read/write only to its owned databases (assuming the user has the CREATEDB privilege)?

Question 2: How can I disable for a user the listing of all databases via the psql -l command? Even if the answer to the first question is yes then this listing is still available to an arbitrary user.

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

囚我心虐我身 2024-10-23 23:34:58

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

There's no way to turn off psql -l without possibly breaking things. You can use the sameuser configuration option in pg_hba.conf to only let users connect to their own databases.

孤独岁月 2024-10-23 23:34:58

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

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

Q1: No. This is all controlled by privileges at various levels. To write into a table, you need privileges on that table, etc. The only privileges on the database level (which the owner would have by default) are the ability to create schemas and temporary tables. That's probably not what you had in mind. You could probably set it up that way, but it's far from the default or the normal setup.

Q2: You could revoke the SELECT privilege on pg_database. But doing that it not really supported. I suggest you reconsider whether you really need that.

人海汹涌 2024-10-23 23:34:58

回复 1) 是的,这是正确的

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

编辑
您可能会对这个讨论感兴趣:
http://www.mail-archive.com/[电子邮件受保护]/msg64005.html

re 1) yes, that's correct

re 2) I think it can be done by using revoke select on pg_database from public but I'm not sure what side-effects that will have.

Edit
This discussion might be interesting for you:
http://www.mail-archive.com/[email protected]/msg64005.html

阿楠 2024-10-23 23:34:58

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

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

Postgres 8.4

Main case

We modify template1 to revoke all rights from "PUBLIC" to the public schema, to prevent access to the public schema of indiviudial customer databases by other customers.

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文