在测试台上,我尝试使 SQL Server 2005 对等(事务)复制正常工作,并让复制代理在该NT AUTHORITY\NETWORK SERVICE
帐户下运行。
在此之前,我设置了对等复制,代理在 SQL Server 代理服务帐户(即系统帐户)下运行,并在 AD 中创建了一个包含机器帐户的安全组。我授予该组对数据库、PAL、分销商的必要权限。这很有效。
如果我尝试对以 NT AUTHORITY\NETWORK SERVICE(或 NT AUTHORITY\NETWORKSERVICE - 没有空格,我都试过了)身份运行的代理进行完全相同的设置,我会在复制监视器中看到以下错误:
无法开始执行(原因:验证代理 Nt Authority\Network Service 时出错,系统错误:登录失败:用户名未知或密码错误)
我还尝试在每台服务器上为网络服务设置一个 sql 登录名,并赋予其 sysadmin 角色。这没什么区别。难道根本就不可能将复制代理作为网络服务运行吗?
(注意 - 我知道我可以使用带有用户名/密码的 AD 帐户。出于各种原因,我们不想在这种情况下这样做)
答案1
为了达夫曼和其他人的利益,我们确实找到了一个非标准的解决方案。
如果查看每个复制代理的 SQL Server 代理作业,作业的属性将显示分发服务器 (distrib.exe)、日志读取器 (logread.exe) 和快照 (snapshot.exe) 代理所需的命令行选项。
我用 c# 编写了一个小型 Windows 服务,使用这些命令行参数启动这些代理,并将该服务设置为在网络服务帐户下运行。这很好用。
为了实现这一点,您必须从启动复制代理的 SQL 服务器代理中删除作业。此外,当以这种方式启动代理时,控制代理的 GUI 工具(例如从复制监视器开始同步)不再起作用,因此我向 Windows 服务添加了一些功能来替换这些功能。
但其他一切(警报、报告等)似乎都很好。我们对这个配置进行了几个月的测试,没有发现任何问题。
请注意,如果您不想编写 Windows 服务,您可以使用批处理文件执行相同的操作,并通过计划任务或 srvany 启动它(这是我们首次测试它的方式)。