授予拒绝权限堆叠


9

对于角色db_denycustomer,我希望customer表的列代码是可选择的,而其他都不是。所以我这样做:

DENY SELECT ON dbo.customer TO db_denycustomer
GRANT SELECT ON dbo.customer (code) TO db_denycustomer

...而且效果很好。凉!但是,为什么呢?

我在相关文章中读到的是该权限栈,但DENY具有优先权。相反,在我的情况下,似乎最后一个权限“查询”优先。果然,如果我以相反的顺序执行它们,后者DENY也会隐藏代码列。

您能详细说明一下吗?

我还向测试的用户提供了默认值db_datawriterdb_datareader角色。

Answers:


10

这是为向后兼容而提供的已记录行为。文档摘录:

警告表级DENY的优先级不高于列级GRANT。权限层次结构中的这种不一致已保留,用于向后兼容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.