MSSQL 2008 R2 服务器角色:服务器角色是否对*所有数据库*具有隐式特权?

gro*_*wse 5 security sql-server

我正在建立一个涉及 .NET 解决方案和 MSSQL 2008 数据库的持续集成解决方案。

我所有的构建服务器都位于一个名为Build Servers. 我已将DOMAIN\Build Servers对象创建为 MSSQL 登录名并授予该组dbcreatorsecurityadmin服务器角色。我没有授予任何特定的数据库角色,因为我的理解是这些服务器角色应该让该组中的任何 AD 帐户创建、更改、删​​除和数据库或用户。

我正在运行一个示例作业,它应该对特定数据库应用一些简单的修改。但是,我收到以下错误:

Detailed message Cannot open database "awesome-database" requested by the login. The login failed. 
Database.dbschema : Deploy error TSD01234: Login failed for user 'DOMAIN\BUILDSERVER01$'.
Run Code Online (Sandbox Code Playgroud)

DOMAIN\BUILDSERVER01$ 肯定在 Build Servers 组中,因此它应该能够登录并更改任何数据库。

我是否在这里遗漏了一些明显的内容,或者我是否必须将此登录名映射到存在的每个数据库?

编辑

如果我授予sysadmin,它会起作用。嗯。

Sam*_*gan 5

服务器角色是服务器范围的,适用于每个数据库,您遇到问题的原因是您授予的角色没有正确的权限:

  • 安全管理员:可以管理服务器安全。
  • DbCreator:可以创建、更改、删​​除和恢复数据库。

当你说

“我正在运行一个示例作业,它应该对特定数据库应用一些简单的修改”

我认为这意味着您正在尝试更改现有数据库,这两个角色都不能提供打开或更改数据库内容的能力,实际上唯一的角色是 sysadmin 角色。

因此,您的选择是使该组成为 sysadmin 组的成员(该组的权限可能比您想授予的多),或者授予对单个数据库的权限(手动或脚本)。

SQL Server 的下一版本将允许创建用户定义的服务器角色。