对单个表的访问权限列入白名单

1 sql-server-2008 permissions

是否可以将特定表的访问列入白名单(例如包含密码哈希加盐)?

我的理想情况是任何人都可以通过存储过程实现插入、更新、删除和选择的权限为零。

我该如何设置?

Mik*_*Fal 7

对 SQL Server 中数据库的访问主要通过两个主体进行管理:

  • 登录 - 允许访问实例的安全主体。
  • 用户 - 链接到允许访问特定数据库的登录名的安全主体。

默认情况下,SQL Server 遵循最小权限的做法,这意味着当您创建这些主体时(此处的进一步文档),它们对数据库和该数据库中的对象的访问权限最小。最初,这些主体只能连接到实例或数据库,而不能连接其他任何东西,例如选择或修改数据。

这意味着您作为管理员将需要对GRANT需要访问的主体的权限。例如,如果您有一个表,并且您想让用户能够读取该表上的数据:

GRANT SELECT ON table_foo TO user_bar;
Run Code Online (Sandbox Code Playgroud)

一旦到位,您的用户就可以从 中进行选择table_foo,但什么也不做。您可以根据需要进一步向其他用户授予其他权限,或者也REVOKE/DENY授予权限。有关此问题的进一步说明,请参见此处

最后,您可以利用角色来额外管理您的安全性。角色本质上是被授予权限的容器,您可以将用户分配给这些角色,就像 Active Directory 组一样。SQL Server 有多个默认可用且常用的服务器数据库角色,但您也可以创建自定义数据库级角色并为这些角色分配特定权限。

总体而言,数据库安全是一个超出 StackExchange 答案范围的大主题,但基本思想是您可以通过为数据库对象分配特定权限并严格控制这些对象的安全性来管理“白名单”。