限制用户只能使用 PostgreSQL 中的一种模式?

And*_*eKR 3 postgresql permissions database-schema postgresql-9.5 sql-grant

PostgreSQL 中是否可以创建只能访问单个模式的用户?

这是我尝试过的:

REVOKE ALL ON DATABASE testdb FROM public;
GRANT CONNECT ON DATABASE testdb TO testuser;
Run Code Online (Sandbox Code Playgroud)

当我以测试用户身份连接时,我确实无法访问实际数据:

> SELECT * FROM some_table;
ERROR:  permission denied for relation some_table
Run Code Online (Sandbox Code Playgroud)

但是,我仍然可以列出所有其他模式中的所有表等:

SELECT * FROM pg_tables;
     schemaname     |                 tablename                 | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity
--------------------+-------------------------------------------+------------+------------+------------+----------+-------------+-------------
 test2              | foo                                       | postgres   |            | t          | f        | f           | f
 test2              | bar                                       | postgres   |            | t          | f        | f           | f
...
Run Code Online (Sandbox Code Playgroud)

Lau*_*lbe 5

不可能将 PostgreSQL 配置为用户只能查看他或她有权访问的系统目录中的那些对象。

如果您需要这样的设置,您应该为每个用户创建一个数据库。