为什么要授予对SEQUENCE的特殊权限?

时间:2019-01-28 20:11:11

标签: postgresql grant

在数据库中限制对SEQUENCE的权限的好用例是什么?

通常,当我授予对表的权限时,我也会授予对SEQUENCES的相同权限。这似乎是多余的步骤,那么当SEQUENCE权限与TABLE权限不同时,是否有一个很好的用例?

1 个答案:

答案 0 :(得分:2)

我可以看到3个原因。

  • 并非所有序列都附加到表上,因此允许单独访问它们是有意义的。
    例如,向服务器发送消息的应用程序可能需要所有消息的唯一标识符,在这种情况下,DB序列是一种生成ID的便捷方法,该ID在所有客户端上都是唯一的。

  • 与表不同,普通用户在表上时很少获得序列上的所有特权,并且无​​论如何它们都是不同的(分别为SELECT USAGE UPDATESELECT INSERT UPDATE DELETE TRUNCATE REFERENCES TRIGGER)。这会造成混乱,以授予序列上的所有特权。正确的方法是仅对序列授予USAGE
    您可能会想象有一种风险,当该序列用于在表上生成主键值时,让任何人将序列重置为1的风险。
    从这个意义上说,对序列的特权确实需要单独管理。

  • 数据库中所有对象以及与安全性相关的所有事物的标准行为是,必须明确地授予对象特权,然后任何人才能使用它。
    上面的两个要点仅说明了为什么特权必须特定于序列,但是这里有一个更普遍的考虑,即为什么默认情况下永远不授予特权。