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

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

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

我构建的所有服务器都位于名为的 AD 安全组中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$'.

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

我是否遗漏了这里显而易见的东西,或者我是否必须将此登录映射到每个存在的数据库?

编辑

如果我同意sysadmin,它就起作用了。嗯。

答案1

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

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

当你说

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

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

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

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

相关内容