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

SQL Server 2017 CU22下Always On副本间登录名自动转移方法咨询

关于SQL Server 2017 CU22 Always On可用性组自动同步登录名的方案

嘿,我来帮你梳理下这个问题——SQL Server的Always On可用性组本身不会自动同步登录名和相关的服务器级别权限,不过有几种可靠的方法可以实现自动(或半自动化)的同步,适配你用的2017 CU22版本:

1. 改用包含数据库用户(最推荐)

如果你的业务场景允许,这是最省心的方案:

  • 将数据库配置为部分包含或完全包含模式,执行命令:ALTER DATABASE [YourDB] SET CONTAINMENT = PARTIAL;;
  • 创建包含数据库用户,这类用户不需要映射到服务器级登录名,身份验证直接在数据库内部完成;
  • 当可用性组故障转移时,包含数据库用户会跟着数据库一起同步到新主副本,完全不需要额外处理登录名的迁移。

2. 系统存储过程+SQL代理作业自动同步

微软官方提供了专用存储过程来生成登录名的迁移脚本,你可以基于它们做自动化:

  • 先在主副本创建sp_help_revlogin和sp_hexadecimal存储过程(脚本可直接从SQL Server官方文档获取,复制执行即可);
  • 创建一个SQL代理作业,定期调用这两个存储过程,生成包含登录名、密码哈希、服务器角色权限的完整脚本;
  • 通过链接服务器或者作业步骤的跨实例执行,将生成的脚本自动在辅助副本上运行,实现定期同步。如果是可读辅助副本,还可以设置作业在主副本故障转移后自动切换执行目标。

3. PowerShell脚本自动化同步

写一个PowerShell脚本,实现登录名的对比和同步:

  • 脚本逻辑:连接主副本,获取所有服务器登录名及其密码哈希、权限信息;
  • 连接辅助副本,对比缺失的登录名或权限不一致的条目;
  • 自动生成并执行同步脚本,确保两边登录名完全一致;
  • 将这个脚本配置为Windows任务计划或者SQL代理作业,定时运行,实现近乎实时的同步。

注意事项

  • 无论用哪种方案,都要在测试环境先验证故障转移后的登录和权限情况,确保业务不受影响;
  • 如果你用到了Azure AD登录,SQL Server 2017 CU22对这类登录的同步支持已经比较完善,但需要注意脚本中要包含AD登录的相关逻辑;
  • 对于SQL代理作业,要确保作业的所有者和代理账户在所有副本实例上都有足够的权限,故障转移后能正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:45:07