Postgresql 如何防止用户能够看到其他数据库和其他数据库中的表?

Postgresql 如何防止用户能够看到其他数据库和其他数据库中的表?,postgresql,Postgresql,我想创建一个postgres用户,它只能访问postgres服务器上的一个数据库 目前我的流程是: create database database1; create user user1 with password 'pass'; grant all privileges on database database1 to user1; 但是user1仍然可以看到数据库、用户、表等的列表。有没有办法阻止该用户看到这些信息?用户需要能够写入和读取该数据库 非常感谢。默认情况下,您创建的任何对象都

我想创建一个postgres用户,它只能访问postgres服务器上的一个数据库

目前我的流程是:

create database database1;
create user user1 with password 'pass';
grant all privileges on database database1 to user1;
但是user1仍然可以看到数据库、用户、表等的列表。有没有办法阻止该用户看到这些信息?用户需要能够写入和读取该数据库


非常感谢。

默认情况下,您创建的任何对象都是在公共模式中创建的。此外,您创建的任何用户都具有公共架构的创建和使用权限。您应该为此用户撤销对公共架构的创建和使用,或者更改默认访问级别。您还需要将此用户有权访问的数据库移动到用户的模式或用户可访问的模式中。请参阅Postgres手册中的。

撤销对的选择权限和中的某些部分。

每个用户都可以看到列出的其他数据库和角色,但永远不能看到其他数据库中的表

如果撤消除已分配数据库外的所有数据库的连接权限,用户将无法访问其他数据库的内容

角色和数据库名称是全局的,不容易被阻止。您可以尝试Frank Heiken关于在系统表上选择性撤销的建议,但这样做是有风险的。usenet邮件列表上的PostgreSQL开发人员不鼓励篡改对系统目录的访问

Psql和其他工具一样,假设没有它们,它们将是可用的,并且功能很差


为什么知道其他数据库和角色的名称如此糟糕?

用户将在我们这边创建数据库。我们不希望用户能够看到彼此的数据库、表名等,以此作为数据隐私/安全性的衡量标准。如果用户可以在数据库中列出不属于他们的表,这是一件坏事。它会给出不一定需要的数据。例如,名为“cicallc”的数据库可能表明“Cica Llc”是您的客户。下面一个名为“cicaalfresco”的数据库可能表明,他们在做什么。数据库的数量可能会显示您的系统中有多少用户(=客户)。等等这是postgresql开发人员在概念上的错误。一个普通用户应该发现自己处于一个环境中,在这个环境中,他只能访问他必须访问的任何内容,而不能访问更多内容。@peterh,“这正是postgresql开发人员的一个概念错误”;我真不敢相信他们会这么做。这就像让每个登录用户都可以使用所有用户(在任何系统中)的登录名一样。@PMarecki注意,m$sql也有同样的问题。Mysql没有。不知道最近的版本有什么更新吗?@viggy28:没有,没有任何变化。当您允许用户连接到您的数据库时,该用户可以从您的数据库中获取(一些)信息。选择权在你。