创建一个Postgresql视图,限制用户可以看到的内容

时间:2015-06-24 09:32:46

标签: postgresql view permissions

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

是否有办法授予对此受限列的访问权限,创建视图并撤消权限,但在撤消权限后视图仍会运行?

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

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

默认情况下,表只能由其所有者访问。同一所有者应使用您要公开的列创建视图。然后,您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和专栏“秘密” - 无法访问,但对所有者而言。