SELECT *当禁止访问某些列时

时间:2018-12-06 15:52:37

标签: postgresql

我有一个具有列级授予的表tbl,其中ab列可供所有人读取,而c列仅可由某些角色读取。

当前,SELECT * FROM tbl对于具有ERROR: permission denied for relation c的非特权用户失败。有什么方法可以使语句仅返回列ab而不是失败?

我知道通常不建议使用SELECT *,但是数据科学家使用此表,这些科学家直接通过SQL或通过各种连接表的工具进行大量临时查询。

我知道我可以创建一个视图,但是表比示例要复杂得多。有20到30列具有不同角色访问组合的列,因此它至少会带来尽可能多的视图。

1 个答案:

答案 0 :(得分:2)

您可以在此表的顶部定义一个视图:

CREATE VIEW tbl_view AS (
    SELECT a, b
    FROM tbl
)

然后,让数据科学家使用SELECT *来达到这种观点。我假设实际上除了ab之外还有更多的列。这里的想法是,您需要繁重地拼出允许的列,因此您的消费者不必为此担心。