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

SQL Server日志传送作业持sysadmin权限仍无法记录历史错误

日志传送复制作业sysadmin权限仍触发权限报错排查方案

你遇到的报错日志如下:

2021-08-22 21:00:00.86 Starting transaction log copy. Secondary ID: 'c29f....'
2021-08-22 21:00:00.87 Error: Could not log history/error message.(Microsoft.SqlServer.Management.LogShipping)
2021-08-22 21:00:00.87 Error: Only members of the sysadmin fixed server role can perform this operation.(.Net SqlClient Data Provider)

可按以下优先级排查原因:

  • 核查作业运行账号与你校验的账号是否一致
    多数场景下用户校验的是自己登录SSMS的个人账号,但日志传送作业的运行上下文由SQL Server代理配置决定,和登录账号无关:
    1. 打开SQL Server代理节点,找到对应日志传送复制作业,右键依次点击【属性】-【步骤】,双击运行步骤,查看【运行身份】配置
    2. 如果运行身份为“SQL Server代理服务账号”,需要校验SQL Server代理服务的启动账号是否属于sysadmin角色
    3. 如果配置了代理账户(Proxy),需要校验代理凭证映射的Windows账号的权限
    4. 若配置了独立的日志传送监控实例,需确认作业运行账号同时在主实例、辅助实例、监控实例三个实例上都属于sysadmin角色
  • 核查msdb系统表权限配置
    报错提示无法写入历史/错误信息,日志传送的历史记录会写入msdb库的log_shipping_monitor_history_detail、log_shipping_monitor_error_detail系统表,权限异常会触发该报错:
    1. 执行语句SELECT name, suser_sname(owner_sid) FROM sys.databases WHERE name = 'msdb'确认msdb库所有者为合法sysadmin账号(通常为sa)
    2. 执行语句USE msdb; EXEC sp_helprotect @username = 'public', @objname = 'log_shipping_monitor_history_detail'确认public角色对该表有INSERT权限,日志传送作业默认通过public角色写入历史记录
  • 核查服务账号的特殊限制
    1. 如果SQL Server代理服务使用本地系统/网络服务账号,跨实例访问时会被识别为机器账号域名\机器名$,需确认该机器账号在所有涉及的实例上都有sysadmin权限
    2. 域环境下需校验服务账号是否被组策略限制了权限继承、本地登录权限等
  • 重置日志传送配置
    以上核查都无异常的情况下,大概率是旧的日志传送配置元数据损坏,删除当前辅助节点的日志传送配置后重新搭建,即可解决残留配置导致的上下文异常问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:57:01