实现 SQL Server 代理安全性

SQL Server 代理使数据库管理员能够在一个安全上下文中运行每个作业步骤,这个安全上下文只具有执行该作业步骤所需的权限,这是由 SQL Server 代理决定的。若要为某个特定的作业步骤设置权限,可以创建一个具有所需权限的代理,然后将该代理分配给该作业步骤。一个代理可以指定给多个作业步骤。对于需要相同权限的作业步骤,可以使用同一个代理。

注意注意

从 SQL Server 2000 升级后,升级前存在的所有用户代理帐户都将更改为临时全局代理帐户 UpgradedProxyAccountUpgradedProxyAccount 只被授予访问以前显式使用的子系统的权限,不能访问升级后的任何子系统。

下面的内容将解释必须为用户授予什么样的数据库角色,他们才能使用 SQL Server 代理创建或执行作业。

授予访问 SQL Server 代理的权限

若要使用 SQL Server 代理,用户必须是下列一个或多个固定数据库角色的成员:

  • SQLAgentUserRole

  • SQLAgentReaderRole

  • SQLAgentOperatorRole

这些角色存储在 msdb 数据库中。默认情况下,任何用户都不是这些数据库角色的成员,必须显式授予这些角色中的成员身份。作为 sysadmin 固定服务器角色成员的用户可以完全访问 SQL Server 代理,不需要成为这些固定数据库角色的成员便可以使用 SQL Server 代理。如果某个用户既不是这些数据库角色的成员,也不是 sysadmin 角色的成员,那么当他们使用 SQL Server Management Studio 连接到 SQL Server 时,不能访问 SQL Server 代理节点。

这些数据库角色的成员可以查看和执行它们所拥有的作业,还可以创建作为现有代理帐户运行的作业步骤。有关与每个角色关联的特定权限的详细信息,请参阅 SQL Server 代理固定数据库角色

sysadmin 固定服务器角色的成员具有创建、修改和删除代理帐户的权限。sysadmin 角色的成员具有创建未指定代理的作业步骤的权限,但却作为 SQL Server 代理服务帐户运行,该帐户是用于启动 SQL Server 代理的帐户。

指导原则

遵循下列指导原则可以提高 SQL Server 代理实现的安全性:

  • 专门为代理创建专用的用户帐户,并且只使用这些代理用户帐户来运行作业步骤。

  • 只为代理用户帐户授予必需的权限。只授予运行分配给给定代理帐户的作业步骤实际所需的那些权限。

  • 不要作为 Windows Administrators 组成员的 Microsoft Windows 帐户运行 SQL Server 代理服务。