创建 SQL Server 代理

适用于:SQL Server

本文介绍如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中创建 SQL Server 代理代理。

SQL Server 代理帐户定义了作业步骤运行的安全上下文。 每个代理对应于安全凭据。 若要为特定作业步骤设置权限,请创建具有 SQL Server 代理子系统所需权限的代理,然后将该代理分配给作业步骤。

Azure SQL 托管实例,目前大多数但并非所有 SQL Server 代理功能都受支持。 有关详细信息,请参阅 Azure SQL 托管实例 T-SQL 与 SQL Server 的差异 或 SQL 托管实例中的 SQL 代理作业限制

局限性

创建代理之前,必须先创建凭据(如果尚未存在)。

SQL Server 代理使用凭据来存储有关 Windows 用户帐户的信息。 凭据中指定的用户必须在运行 SQL Server 的计算机上具有“从网络访问此计算机”权限(SeNetworkLogonRight)。

SQL Server 代理检查代理的子系统访问权限,并在每次运行作业步骤时授予对代理的访问权限。 如果代理不再有权访问子系统,则作业步骤将失败。 否则,SQL Server 代理将模拟在代理中指定的用户并运行作业步骤。 有关代理子系统的列表,请参阅 sp_grant_proxy_to_subsystem

创建代理不会更改在代理凭据中指定的用户的权限。 例如,可以为无权连接到 SQL Server 实例的用户创建代理。 在这种情况下,使用该代理的作业步骤无法连接到 SQL Server。

如果用户的登录名有权访问代理,或者用户属于有权访问代理的任何角色,则用户可以在作业步骤中使用代理。

权限

只有 sysadmin 固定服务器角色的成员有权创建、修改或删除代理帐户。 不属于 sysadmin 固定服务器角色的用户必须添加到 msdb 数据库中以下 SQL Server 代理固定数据库角色之一,才能使用代理:SQLAgentUserRoleSQLAgentReaderRoleSQLAgentOperatorRole

如果除了代理之外还要创建凭证,则需要 ALTER ANY CREDENTIAL 权限。

使用 SQL Server Management Studio (SSMS)

  1. 对象资源管理器中,选择加号以展开要在 SQL Server 代理上创建代理的服务器。

  2. 选择加号以展开 SQL Server 代理

  3. 右键单击 代理 文件夹,然后选择“新建代理”

  4. 在“”新建代理帐户“ 对话框中的”常规“页上,在 代理名称 框中输入代理帐户的名称。

  5. 凭据名称 框中,输入代理帐户将使用的安全凭据的名称。

  6. 描述 框中,输入代理帐户的描述

  7. “活动”下的以下子系统下,为此代理选择适当的子系统或子系统。

  8. 主体 页上,添加或删除登录名或角色,以授予或删除对代理帐户的访问权限。

  9. 完成后,选择“确定”

使用 Transact-SQL

以下脚本创建名为 CatalogApplicationCredential的凭据,创建代理 Catalog application proxy 并向其分配凭据 CatalogApplicationCredential,并向代理授予对 ActiveX 脚本子系统的访问权限。

  1. 创建凭据 CatalogApplicationCredential

    USE msdb;
    GO
    
    CREATE CREDENTIAL CatalogApplicationCredential
        WITH IDENTITY = 'REDMOND/TestUser', SECRET = 'G3$1o)lkJ8HNd!';
    GO
    
  2. 创建代理 Catalog application proxy 并向其分配凭据 CatalogApplicationCredential

    EXECUTE dbo.sp_add_proxy
        @proxy_name = 'Catalog application proxy',
        @enabled = 1,
        @description = 'Maintenance tasks on catalog application.',
        @credential_name = 'CatalogApplicationCredential';
    GO
    
    
  3. 授予代理 Catalog application proxy 对 ActiveX 脚本子系统的访问权限。

    EXECUTE dbo.sp_grant_proxy_to_subsystem
        @proxy_name = N'Catalog application proxy',
        @subsystem_id = 2;
    GO