在postgresql中创建隐藏列

时间:2014-07-07 06:44:58

标签: database postgresql security

我们可以在表格中创建隐藏列吗?只有在select语句中明确指定列名时才应列出它。

2 个答案:

答案 0 :(得分:4)

您可以通过创建视图并仅选择要显示的列来有效地执行此操作。

答案 1 :(得分:3)

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

但是,您可以使用您选择的任何用户界面层/查询构建器来执行此操作。

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

可以设置列权限,这样用户只能选择一些列,但你不能再说“除了这一列之外的全部”,你必须说“我希望他们能够看到这些“。

更新:@maybeWeCouldStealAVan有一个最明智的建议:你可能想要一个视图。把这个问题标记为正确,而不是我的。