创建 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 固定服务器角色成员的用户必须添加到数据库中以下 SQL Server 代理固定数据库角色 msdb 之一才能使用代理:

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