授予拒绝权限堆叠

Geo*_*tis 9 sql-server permissions role

对于角色db_denycustomer,我希望客户表的列代码是 SELECTable 的,其他的都不行。所以我这样做了:

DENY SELECT ON dbo.customer TO db_denycustomer
GRANT SELECT ON dbo.customer (code) TO db_denycustomer
Run Code Online (Sandbox Code Playgroud)

...它工作正常。凉爽的!但是,为什么

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

你能详细说明一下吗?

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

Dan*_*man 10

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

注意表级 DENY 不优先于列级 GRANT。为了向后兼容,保留了权限层次结构中的这种不一致。