在节点之间切换时,SQL Server 2012 AlwaysOn 可用性组服务器登录失败

在节点之间切换时,SQL Server 2012 AlwaysOn 可用性组服务器登录失败

我正在设置 3 节点集群作为可用性组的一部分。

最初我使用 SQL Management Studio 测试了节点之间的故障转移,当我停止一个节点时,一切都成功故障转移,并且我仍然能够编写查询。

我开始使用 SQL 用户连接的应用程序进行测试,每当我切换节点时,都会登录失败。

我认为导致此问题的原因在于与数据库绑定的服务器登录 SID 与其他节点上的服务器登录不同,从而导致登录失败。如果我理解不正确,请纠正我。

如果我理解正确,我该如何确保服务器登录 SID 在节点之间相同?有没有办法复制它,或者应该如何完成?

我阅读了一些有关包含数据库的内容,我可以在数据库本身上设置登录名,而不是创建服务器登录名,但我不想走这条路。

答案1

你的直觉可能是正确的。你可以通过运行以下命令来验证节点之间的 SID 是否不同:

select name, sid from sys.server_principals

在每个节点上并进行比较。

至于如何保持它们同步,请在创建时进行同步(不幸的是,我不知道如何事后更改 SID)。也就是说,该create login语句有一个可选子句来提供 SID。所以我会这样做:

-- on node 1
create login [foobar] with password = 'str0ngp@ssword!';
select sid from sys.server_principals where name = 'foobar';

-- on subsequent nodes
create login [foobar] with password = 'str0ngp@ssword!', sid = <the sid you obtained from node 1>;

我已经这样做了,以便生成自己的 SID 并将其传递给节点 1(以便相同的脚本在所有服务器上运行),但我将其留给读者作为练习。:)

相关内容