创建 SQL Server 代理的代理帐户

适用于SQL Server

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

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

Azure SQL 托管实例目前支持大多数(但不是所有)SQL Server 代理功能。 有关详细信息,请参阅 Azure SQL 托管实例与 SQL Server 的 T-SQL 差异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 代理固定数据库角色之一,才能使用代理:SQLAgentUserRole、SQLAgentReaderRole或 SQLAgentOperatorRole。

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

使用 SQL Server Management Studio (SSMS)

创建 SQL Server 代理的代理帐户

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

  2. 单击加号以展开“SQL Server 代理”。

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

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

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

  6. “说明” 框中输入对代理帐户的说明。

  7. “对以下子系统有效”之下,为此代理选择适当的子系统。

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

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

使用 Transact-SQL

创建 SQL Server 代理的代理帐户

  1. “对象资源管理器” 中,连接到 数据库引擎的实例。

  2. 在标准栏上,选择“新建查询” 。

  3. 以下脚本创建一个名为 CatalogApplicationCredential 的凭据、创建代理 Catalog application proxy 并向其分配凭据 CatalogApplicationCredential,然后向代理授予访问 ActiveX 脚本子系统的权限。 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。

    -- creates credential CatalogApplicationCredential  
    USE msdb ;  
    GO  
    CREATE CREDENTIAL CatalogApplicationCredential WITH IDENTITY = 'REDMOND/TestUser',   
        SECRET = 'G3$1o)lkJ8HNd!';  
    GO  
    -- creates proxy "Catalog application proxy" and assigns
    -- the credential 'CatalogApplicationCredential' to it.  
    EXEC dbo.sp_add_proxy  
        @proxy_name = 'Catalog application proxy',  
        @enabled = 1,  
        @description = 'Maintenance tasks on catalog application.',  
        @credential_name = 'CatalogApplicationCredential' ;  
    GO  
    -- grants the proxy "Catalog application proxy" access to 
    -- the ActiveX Scripting subsystem.  
    EXEC dbo.sp_grant_proxy_to_subsystem  
        @proxy_name = N'Catalog application proxy',  
        @subsystem_id = 2 ;  
    GO  
    

后续步骤