如何用TSQL查询SQL Server事务复制日志读取代理账户?
获取SQL Server事务复制日志读取代理账户的TSQL查询语句
日志读取代理的账户信息并非存储在分发数据库的普通系统表中,而是在几个系统视图里。以下是可直接用于自动化脚本的TSQL查询语句:
基础查询:获取发布关联的日志读取代理核心账户信息
USE [distribution] GO SELECT p.publication AS 发布名称, la.name AS 代理名称, sl.name AS 代理登录账户, la.subscriber_security_mode AS 订阅端安全模式, -- 0=SQL身份验证, 1=Windows身份验证 la.subscriber_login AS 订阅端登录账户, la.publisher_security_mode AS 发布端安全模式, -- 0=SQL身份验证, 1=Windows身份验证 la.publisher_login AS 发布端登录账户 FROM MSlogreader_agents la JOIN MSpublications p ON la.publication_id = p.publication_id LEFT JOIN syslogins sl ON la.job_id IN (SELECT job_id FROM sysjobs WHERE owner_sid = sl.sid) ORDER BY p.publication
进阶查询:查看代理作业的运行账户(含作业步骤细节)
如果需要更详细的作业运行账户信息(对应UI中代理安全里的执行账户),可以用这个查询:
USE [distribution] GO SELECT p.publication AS 发布名称, j.name AS 代理作业名称, js.step_name AS 作业步骤名称, js.subsystem AS 作业子系统, CASE WHEN js.runas_user IS NOT NULL THEN js.runas_user ELSE sl.name END AS 运行账户 FROM MSlogreader_agents la JOIN MSpublications p ON la.publication_id = p.publication_id JOIN sysjobs j ON la.job_id = j.job_id JOIN sysjobsteps js ON j.job_id = js.job_id LEFT JOIN syslogins sl ON j.owner_sid = sl.sid ORDER BY p.publication, js.step_id
关键视图说明
MSlogreader_agents:存储日志读取代理的核心配置,关联对应发布和作业IDMSpublications:关联具体发布名称,便于识别目标发布sysjobs/sysjobsteps:获取代理对应的SQL Server Agent作业细节,包括实际运行账户syslogins:将账户SID映射为可读的登录账户名称
内容的提问来源于stack exchange,提问作者RaviLobo
相关产品推荐
相关产品推荐

