在PostgreSQL中将用户限制为一个模式?

时间:2016-08-22 02:34:02

标签: postgresql permissions database-schema grant postgresql-9.5

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

以下是我的尝试:

var nodeWorkShift = $('<div>' + stringWorkShift + '</div>');
var $contents = $(contents).find(selector).append(nodeWorkShift).end();
// string representation of the collection
console.log( $contents.prop('outerHTML') );

当我以 testuser 连接时,我确实无法访问实际数据:

REVOKE ALL ON DATABASE testdb FROM public;
GRANT CONNECT ON DATABASE testdb TO testuser;

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

> SELECT * FROM some_table;
ERROR:  permission denied for relation some_table

2 个答案:

答案 0 :(得分:1)

无法配置PostgreSQL,以便用户只能在系统目录中查看他或她有权限的那些对象。

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

答案 1 :(得分:1)

我能够这样做:

GRANT USAGE ON SCHEMA schema_name TO user_name;
ALTER USER user_name SET search_path = schema_name;

这样的ALTER USER语句是一种永久设置模式搜索路径的方式,就像设置单个会话的模式搜索路径一样

SET SEARCH_PATH= schema_name_1, schema_name_2;