在postgresql中创建隐藏列

Pav*_*mar 2 database security postgresql

我们可以在表中创建隐藏列吗?仅当我在 select 语句中显式指定列名时才应列出它。

Cra*_*ger 5

不,没有受支持且安全的方法来创建仅在您显式指定列名称时才会列出的隐藏列。PostgreSQL 不提供任何用户可访问的方式来隐藏通配符中的用户定义列*。

不过,您可以使用您选择的任何用户界面层/查询生成器来执行此操作。

(PostgreSQL 实际上确实有隐藏列,正如您将看到的那样select ctid,xmin,xmax from some_table,但它不允许用户添加到隐藏列集中。可以直接修改系统目录来欺骗 PostgreSQl 认为用户定义了列是一个隐藏的系统列,但直接弄乱目录是一个非常糟糕的主意,所以我不会详细解释如何操作。如果您坚持这样做,请阅读pg_attribute...的文档,但要明白您是创造一个巨大的脚枪。)。

您可以设置列权限,以便用户只能选择某些列,但您不能再次说“除此之外的所有列”,您必须说“我希望他们能够看到这些列”。

更新:@maybeWeCouldStealAVan 有最明智的建议:你可能想要一个 view。将该答案标记为正确,而不是我的。


may*_*Van 5

您可以通过创建视图并仅选择您想要显示的列来有效地做到这一点。