在数据库中限制对SEQUENCE的权限的好用例是什么?
通常,当我授予对表的权限时,我也会授予对SEQUENCES的相同权限。这似乎是多余的步骤,那么当SEQUENCE权限与TABLE权限不同时,是否有一个很好的用例?
答案 0 :(得分:2)
我可以看到3个原因。
并非所有序列都附加到表上,因此允许单独访问它们是有意义的。
例如,向服务器发送消息的应用程序可能需要所有消息的唯一标识符,在这种情况下,DB序列是一种生成ID的便捷方法,该ID在所有客户端上都是唯一的。
与表不同,普通用户在表上时很少获得序列上的所有特权,并且无论如何它们都是不同的(分别为SELECT USAGE UPDATE
和SELECT INSERT UPDATE DELETE TRUNCATE REFERENCES TRIGGER
)。这会造成混乱,以授予序列上的所有特权。正确的方法是仅对序列授予USAGE
。
您可能会想象有一种风险,当该序列用于在表上生成主键值时,让任何人将序列重置为1的风险。
从这个意义上说,对序列的特权确实需要单独管理。
数据库中所有对象以及与安全性相关的所有事物的标准行为是,必须明确地授予对象特权,然后任何人才能使用它。
上面的两个要点仅说明了为什么特权必须特定于序列,但是这里有一个更普遍的考虑,即为什么默认情况下永远不授予特权。