You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Azure MI SQL Agent执行账户授予链接服务器使用权限

解决Azure托管实例中SQL Agent访问链接服务器的权限问题

问题回顾

  • 已在Azure托管实例(Azure MI)上创建仅对特定登录账户开放的链接服务器
  • SQL Agent作业需要使用该链接服务器,但默认服务账户User Manager\ContainerAdministrator无法通过sp_addlinkedsrvlogin添加映射,作业执行时因无登录映射被拒绝访问

原因

Azure MI的User Manager\ContainerAdministrator是内部系统账户,并非实例上的常规登录名,因此无法通过sp_addlinkedsrvlogin进行链接服务器的身份映射。

正确解决方案:使用SQL Agent代理账户

通过创建代理账户,让作业以具备链接服务器访问权限的自定义账户身份执行,具体步骤如下:

  1. 创建凭据
    先创建关联目标登录账户的凭据,用于代理账户的身份验证:

    CREATE CREDENTIAL [LinkedServerAccessCredential]
    WITH IDENTITY = N'本地有权访问链接服务器的登录名',
    SECRET = N'该登录名的密码';
    
  2. 创建代理账户
    将凭据绑定到代理账户,并授予其执行TSQL作业步骤的权限(若作业是其他类型,需替换对应子系统ID):

    -- 创建代理
    EXEC msdb.dbo.sp_add_proxy
        @proxy_name = N'LinkedServerJobProxy',
        @credential_name = N'LinkedServerAccessCredential',
        @enabled = 1;
    
    -- 授予代理使用TSQL子系统的权限
    EXEC msdb.dbo.sp_grant_proxy_to_subsystem
        @proxy_name = N'LinkedServerJobProxy',
        @subsystem_id = 3; -- 3对应TSQL子系统,其他子系统ID可参考官方文档
    
  3. 配置链接服务器登录映射
    确保代理账户关联的本地登录名已被添加到链接服务器的映射中:

    EXEC sp_addlinkedsrvlogin
        @rmtsrvname = N'你的链接服务器名称',
        @useself = N'False',
        @locallogin = N'本地有权访问链接服务器的登录名',
        @rmtuser = N'远程服务器的登录账户',
        @rmtpassword = N'远程服务器登录账户的密码';
    
  4. 修改作业步骤的运行身份
    编辑SQL Agent作业的目标步骤,将“运行身份”从默认的SQL Agent服务账户切换为刚创建的LinkedServerJobProxy代理账户。

为什么不推荐临时方案?

  • 开放所有登录访问链接服务器会带来严重的安全风险,违反最小权限原则
  • 迁移作业到常规SQL Server会增加架构复杂度和维护成本,完全没必要——Azure MI本身支持代理账户的方式解决此问题

内容的提问来源于stack exchange,提问作者Peter E

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 17:31:57