【问题标题】:Create a Postgresql view that restricts what a user can see创建一个限制用户可以看到的 Postgresql 视图
【发布时间】:2015-06-24 09:32:46
【问题描述】:

我正在尝试创建一个限制用户只能查看某些列的视图。我已授予对这些列的访问权限。但是当我创建视图时,我遇到了权限错误。看来我还需要授予连接列的权限,这是受限制的列之一。

有没有办法授予对这个受限列的访问权限,创建视图并撤销权限,但在权限被撤销后视图仍将运行?

当我撤销基础表的权限时,视图不会运行。

任何帮助将不胜感激。

【问题讨论】:

  • 我猜你想要一个返回列表而不是视图的函数
  • 但我仍然需要向受限制的联接列授予权限。因此用户仍然可以转到基础表并查看受限列。

标签: postgresql view permissions


【解决方案1】:

默认情况下,只有其所有者可以访问表。同一所有者应该使用您要公开的列创建视图。然后您将GRANT 权限授予其他用户以SELECT 反对该视图。这是在 SQL 标准下授予访问权限的标准模型。

例子:

CREATE TABLE t1 (
  pk       integer PRIMARY KEY,
  t1_col   varchar
);

CREATE TABLE t2 (
  pk       integer PRIMARY KEY,
  fk_t1    integer NOT NULL REFERENCES t1,
  t2_col   varchar,
  secret   varchar
);

CREATE VIEW exposed_columns AS
  SELECT t1_col, t2_col
  FROM t1
  JOIN t2 ON t2.fk_t1 = t1.pk;

以上所有内容可供创建这些对象的角色使用。同一所有者可以允许其他角色访问:

GRANT SELECT ON exposed_columns TO some_role, another_role;

分配了“some_role”或“another_role”角色的用户现在可以从视图中进行选择。视图后面表格中的其他列 - 例如PK、FK 和 "secret" 列 - 只有所有者才能访问。

【讨论】:

    猜你喜欢
    • 2015-04-12
    • 2012-04-04
    • 2015-04-12
    • 2011-06-21
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    相关资源
    最近更新 更多