2017-10-12 25 views
1

postgres可以使用RETURNING子句返回插入的主键。是否可以禁用该功能?我的意思是,如果有人试图使用RETURNING获取插入的ID,它将不会返回任何内容。 (如常见的INSERT) ?禁用postgres中的INSERT返回

+0

我无法回答你问的问题,但我怀疑它没有这个功能。无论如何,你可能会用你的设计在这里吠叫错误的树 - 也许看看编写数据库函数来完成插入操作,或者只是写一点中间件来安全地保护你的数据库免受其用户的影响。 – ldrg

+1

请不要破坏你的帖子。 – DJMcMayhem

回答

1

我认为INSERT命令不能这样做。

一些替代方案:从用户

  • 撤销插入和创建 “SECURITY DEFINER” 的执行插入,或
  • 使用列级权限的功能:在这里从INSERT命令的文档:

    使用RETURNING子句需要在RETURNING中提及的所有列上具有SELECT特权。如果使用查询子句从查询插入行,那么当然需要在查询中使用的任何表或列上具有SELECT特权。

UPDATE: 随着列级权限至少要做两件事情:

  • 撤销选择列:REVOKE SELECT(restricted_col1,...)ON TABLE TestTable的FROM testuser的
  • 撤消插入列:REVOKE INSERT(restricted_col1,...)ON TABLE testtable FROM testuser。在这种情况下,restricted_col1必须具有DEFAULT值或者必须没有NOT NULL约束。
+0

正确:你会正确撤销SELECT。 –