我正在建立一个涉及.NET 解决方案和 MSSQL 2008 数据库的持续集成解决方案。
我构建的所有服务器都位于名为的 AD 安全组中Build Servers
。我已将DOMAIN\Build Servers
对象创建为 MSSQL 登录名,并授予该组dbcreator
和securityadmin
服务器角色。我没有授予任何特定的数据库角色,因为我的理解是这些服务器角色应该允许该组中的任何 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 的下一个版本将允许创建用户定义的服务器角色。