如何查询SSRS中被禁用订阅的操作人?能否通过SSMS实现
默认配置下,SSRS不会在Subscriptions、Catalog这类常规业务表中存储订阅状态变更的操作审计信息,直接遍历业务表无法找到操作人,可按以下优先级排查:
优先查SSRS内置执行日志(2016及以上版本适用)
订阅禁用操作会被记录在ReportServer库的ExecutionLog3视图中,直接执行以下SQL,替换时间范围和目标订阅ID即可定位操作账号:USE ReportServer; GO SELECT UserName AS 操作账号, ItemAction AS 操作类型, [Path] AS 报表路径, TimeStart AS 操作时间, [Parameters] AS 操作参数 FROM dbo.ExecutionLog3 WHERE TimeStart BETWEEN '订阅被禁用的时间范围起点' AND '订阅被禁用的时间范围终点' AND ItemAction LIKE '%Subscription%' AND [Parameters] LIKE '%<Disabled>True</Disabled>%'如果是2016以下版本,直接到SSRS服务日志目录
C:\Program Files\Microsoft SQL Server Reporting Services\SSRS\LogFiles,找对应时间点的日志文件,搜索DisableSubscription、SetSubscriptionProperties关键字,日志中会记录操作的认证账号、来源IP。查SQL Server实例侧审计记录
订阅禁用本质是对dbo.Subscriptions表的更新操作,会将InactiveFlags字段从0改为1。如果实例开启了默认跟踪、SQL Audit或扩展事件,可以直接检索对应时间段对该表的UPDATE操作记录,关联到执行操作的登录账号。参考查询默认跟踪的SQL:SELECT te.name AS 事件类型, NTUserName AS 系统账号, LoginName AS SQL登录账号, StartTime AS 操作时间 FROM sys.fn_trace_gettable(CONVERT(VARCHAR(150), (SELECT TOP 1 value FROM sys.fn_trace_getinfo(NULL) WHERE property = 2)), DEFAULT) t JOIN sys.trace_events te ON t.EventClass = te.trace_event_id WHERE ObjectName = 'Subscriptions' AND te.name = 'Object:Updated' AND StartTime >= '订阅异常的时间起点' ORDER BY StartTime DESC;先排查系统自动禁用场景
并非所有禁用都是人工操作:当订阅连续投递失败次数达到SSRS配置阈值(默认3次),SSRS调度服务会自动将订阅标记为禁用,这类操作的执行账号为SSRS服务运行账号,无普通用户操作记录。可先执行以下SQL确认订阅状态:USE ReportServer; GO SELECT s.LastStatus AS 最近一次运行状态, s.LastRunTime AS 最近运行时间, c.Name AS 关联报表名称 FROM dbo.Subscriptions s JOIN dbo.Catalog c ON s.Report_OID = c.ItemID WHERE s.SubscriptionID = '目标订阅ID' AND s.InactiveFlags = 1如果
LastStatus字段显示连续多次投递失败(如邮件服务连接失败、共享目录权限不足、报表执行报错),则为系统自动触发的禁用。
- SSRS默认日志留存周期为14-60天,需在日志被覆盖前完成排查。
- 如果你的SSRS为SharePoint集成模式,操作审计记录存储在SharePoint平台审计日志中,需到SharePoint管理中心查询。
内容的提问来源于stack exchange,提问作者GandalfTheFoolish

