授予对 MS SQL 中特定数据库中所有表的 Select 访问权限

Cur*_*orf 15 sql-server permissions role sql-server-2012

我有一个服务器,其中包含多个数据库,这些数据库包含在同一个服务器/项目中。我正在使用 MS SQL Server 2012。

我设置了一个特殊角色,其中包含 3 个属于该角色的用户。我想授予 Select 对 1 个特定数据库中所有表的角色的访问权限。

有问题的数据库是一个存档数据库,其中包含过去 12 年中每个月的存档表。最初创建角色时,我通过运行以下命令授予访问权限:

GRANT SELECT ON [dbo].[myarchivetable] TO myspecialrole
Run Code Online (Sandbox Code Playgroud)

这很有效,因为我只需要更改年份和月份并将其全部作为 1 个脚本运行。

我现在发现他们需要选择访问存档数据库中的每个表。我可以执行上述方法,但是必须将所有这些都写出 132 次,很容易出错。

如何轻松地将 myspecialrole 添加到该数据库中的每个表?

小智 21

如果您的所有表都在 dbo 模式中,那么这应该可以工作,如果需要,您可以拒绝单个表

GRANT SELECT ON SCHEMA :: [dbo] TO myspecialrole
Run Code Online (Sandbox Code Playgroud)


小智 5

要授予SELECT整个数据库的权限,请使用以下命令:

USE <MY_DATABASE>
GRANT SELECT ON DATABASE :: <MY_DATABASE> TO <MY_USER>
Run Code Online (Sandbox Code Playgroud)

在哪里

  • <MY_USER>是用户
  • <MY_DATABASE>是数据库名称

授予架构权限没有帮助,原因很简单:如果出现新架构,用户将没有权限。

授予对所有对象的权限并不出于相同的原因,用户将没有对GRANT事件后创建的新对象的权限。