实现 SQL Server 代理安全性

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 管理员 组成员的 Microsoft Windows 帐户下运行 SQL Server 代理服务。

  • 代理仅与 SQL Server 凭据存储一样安全。

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

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

  • 请注意,SQL Server 和 SQL Server 代理有权访问彼此的资产。 这两个服务共享单个进程空间,SQL Server 代理是 SQL Server 服务上的 sysadmin。

  • 在 TSX 向 MSX 注册时,MSX 的系统管理员将获得对 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 验证

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

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

    • 扩展 - Microsoft.SqlServer.Configuration.ConfigExtension.dll

另请参阅

预定义角色
sp_addrolemember(Transact-SQL)
sp_droprolemember(Transact-SQL)
SQL Server 数据库引擎和 Azure SQL 数据库安全中心