【发布时间】:2019-06-27 05:33:37
【问题描述】:
我是一名 Oracle DBA,刚接触 PostgreSQL。我需要分离一些模块的数据,这样一个模块就无法读取另一个模块的数据。 我读到了 PostgreSql 中模式的使用,这与 Oracle 中的使用有些不同。但是似乎建议使用不同模式的方法进行分离和管理 - 就像在 Oracle 中一样。 但是,当我创建 2 个模式时 - 连接到同一个数据库和同一个用户 - 我可以从另一个模式的表中进行选择。 也就是说,例如,如果我有模式 A 拥有表 a,模式 B 拥有表 b,当我将搜索路径设置为模式 B 时,我可以毫无问题地对模式 A 表 a 进行选择。 我找不到从模式 B 撤销此特权的方法。 我唯一能找到的分离数据访问的方法是使用不同的角色,即使用模式 A 创建角色 A,使用模式 B 创建角色 B。然后我可以授予和撤销用户 B 的访问权限,以便它看到我想从角色的 A 表中得到什么。
这是正确的吗?我错过了什么吗?
【问题讨论】:
-
您是否考虑过使用单独的数据库?
-
@sibert:只要 Tamar 只使用一个用户,不同的数据库也无济于事,因为用户对所有数据库都是全局的。所有权属于用户级别。
-
非常感谢@a_horse_with_no_name。这是我的想法,但需要确定。我必须承认,我不明白为什么要使用不同的模式连接同一个用户......它是为了启用对象的重复性(也就是说,能够创建例如同名但在不同名称下的同一个表搜索路径)?
-
@Tamar:每个用户的“模式”一个模式正是 Oracle 使用的。
标签: postgresql