如何向属于被明确拒绝的大型组的单个用户授予 SELECT 权限?

J.D*_*.D. 3 security sql-server permissions sql-server-2008-r2

我有一个表 SuperSecretData,当前设置为拒绝标准 Active Directory 帐户“域用户”对公司中的每个人进行 SELECT。但是一些特定的个人用户确实需要能够从中选择。实现这一目标的正确方法是什么?

表属性 - 权限

Dav*_*oft 7

DENY 会覆盖 GRANT,而继承的 DENY 甚至会覆盖直接的 GRANT。模式或数据库级别的 DENY 会覆盖对象级别的 GRANT。

因此,您将无法直接覆盖 DENY。

您可以创建与 SuperSecretData 相同的用户拥有的视图、同义词或存储过程,并授予他们访问权限。

除了我只希望某些特定用户拥有 SELECT 权限的几个表外,是否有更好的方法将 SQL 服务器上的几乎所有实体都授予“域用户”权限?

是的。永远不要使用内置角色,并始终使用模式级授权。然后,您可以创建单独的架构以提高安全性。例如

grant select on schema::dbo to ...
Run Code Online (Sandbox Code Playgroud)

而不是内置角色

alter role db_datareader add . . .
Run Code Online (Sandbox Code Playgroud)

或数据库级授权

grant select to ... 
Run Code Online (Sandbox Code Playgroud)