我有一个具有列级授予的表tbl
,其中a
和b
列可供所有人读取,而c
列仅可由某些角色读取。
当前,SELECT * FROM tbl
对于具有ERROR: permission denied for relation c
的非特权用户失败。有什么方法可以使语句仅返回列a
和b
而不是失败?
我知道通常不建议使用SELECT *
,但是数据科学家使用此表,这些科学家直接通过SQL或通过各种连接表的工具进行大量临时查询。
我知道我可以创建一个视图,但是表比示例要复杂得多。有20到30列具有不同角色访问组合的列,因此它至少会带来尽可能多的视图。
答案 0 :(得分:2)
您可以在此表的顶部定义一个视图:
CREATE VIEW tbl_view AS (
SELECT a, b
FROM tbl
)
然后,让数据科学家使用SELECT *
来达到这种观点。我假设实际上除了a
和b
之外还有更多的列。这里的想法是,您需要繁重地拼出允许的列,因此您的消费者不必为此担心。