我想创建一个只能访问postgres服务器上的一个数据库的postgres用户。
目前我的流程是:
create database database1;
create user user1 with password 'pass';
grant all privileges on database database1 to user1;
但是user1仍然可以看到dbs,用户,表等的列表。有没有办法阻止该用户看到该信息?用户需要能够写入和读取该数据库。
非常感谢。
答案 0 :(得分:8)
每个用户都可以看到列出的其他数据库和角色,但不应该看到其他数据库中的表。
如果撤消除分配的数据库之外的所有数据库的CONNECT权限,则用户将无法访问其他数据库的内容。
角色和数据库名称是全局的,不容易阻塞。您可以尝试Frank Heikens关于系统表的选择性撤销的建议,但是你冒险去做。 usenet邮件列表上的PostgreSQL开发人员不鼓励篡改对系统目录的访问。
Psql和其他工具一样,假设没有它们,它们将可用并且功能很差。
为什么知道其他数据库和角色的名称如此糟糕?
答案 1 :(得分:2)
撤消information_schema上的SELECT权限以及system catalog中的部分内容。
答案 2 :(得分:1)
默认情况下,您创建的所有对象都是在公共模式中创建的。此外,您创建的任何用户都对公共模式具有CREATE和USAGE权限。您应该撤消此用户的公共架构的CREATE和USAGE,或者您应该更改默认访问级别。您还需要将此用户有权访问的数据库移动到用户的架构或用户可访问的架构。请参阅Postgres手册中的DDL Schemas。
答案 3 :(得分:0)
您可以轻松地在同一台机器上(显然在不同端口上)运行不同的PostgreSQL服务器-那里没有交叉访问权!