实现 SQL Server 代理安全性

适用于:SQL ServerAzure SQL 托管实例

重要

Azure SQL 托管实例目前支持大多数(但不是所有)SQL Server 代理功能。 有关详细信息,请参阅 Azure SQL 托管实例与 SQL Server 的 T-SQL 区别

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

下面的内容将解释必须为用户授予什么样的数据库角色,他们才能使用 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 代理服务。

  • 代理仅具有与 SQL Server 凭据存储区相同的安全性。

  • 如果用户写入操作可对 NT 事件日志进行写入,则用户可通过 SQL Server 代理引发警报。

  • 请不要将 NT 管理帐户指定为服务帐户或代理帐户。

  • 请注意,SQL Server 和 SQL Server 代理有权互相访问资产。 这两项服务共享一个进程空间,并且 SQL Server 代理是 SQL Server 服务的 sysadmin。

  • 当 TSX 使用 MSX 进行登记时,MSX sysadmins 将获得对 SQL Server 的 TSX 实例的完全控制权。

  • ACE 是一个扩展插件,不能调用自身。 ACE 由 Chainer ScenarioEngine.exe(也称为 Microsoft.SqlServer.Chainer.Setup.exe)调用,也可由其他主机进程调用。

  • ACE 取决于 SSDP 拥有的以下配置 DLL,因为这些 DLL 的 API 是由 ACE 调用的:

    • SCO - Microsoft.SqlServer.Configuration.Sco.dll,包括针对虚拟帐户的新 SCO 验证

    • Cluster - Microsoft.SqlServer.Configuration.Cluster.dll

    • SFC - Microsoft.SqlServer.Configuration.SqlConfigBase.dll

    • Extension - Microsoft.SqlServer.Configuration.ConfigExtension.dll

另请参阅

使用预定义角色
sp_addrolemember (Transact-SQL)
sp_droprolemember (Transact-SQL)
安全性和保护(数据库引擎)