如何限制对 SQL Server 中 HR 数据的访问?

Tar*_*zan 2 sql-server

我们有一个包含人力资源数据的 HR 架构的 SQL Server 数据库。它包括工资和其他私人信息。数据库所有者、系统管理员和 [Executives] 角色的成员可以查看 HR 架构。

其他一些用户是 db_datareader 角色的成员,该角色能够从数据库的任何表中读取数据。他们在人力资源安全要求存在之前就被添加到该角色中。

拒绝所有其他用户访问的策略是什么?

Ale*_*sko 5

您要做的第一件事就是从db_datareader角色中删除其他用户

alter role db_datareader drop member user1
alter role db_datareader drop member user2
Run Code Online (Sandbox Code Playgroud)

然后创建自定义数据库角色,例如other_users,您命名它,添加成员:

alter role [other_users] add member user1
alter role [other_users] add member user2
Run Code Online (Sandbox Code Playgroud)

然后将数据库上的选择授予角色

grant select to [other_users]
Run Code Online (Sandbox Code Playgroud)

然后拒绝对 HR 架构的访问other_users

deny select on schema::HR to [other_users]
Run Code Online (Sandbox Code Playgroud)

这样,您将让其他用户能够从任何其他模式或表中读取数据,HR 模式除外

  • 如果存在活动的 DENY,则 db_datareader 的成员将无法读取。 (2认同)
  • 据我记忆,DENY 是在 7.0(“新架构”)中引入的,从那时起它就一直以同样的方式工作。在 7.0 之前,我们只有 GRANT 和 REVOKE,最终结果取决于您执行这些语句的顺序(噩梦)。再说一遍,这是我的记忆,距那时已经有一段时间了。:-) (2认同)