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

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

最初我使用SQL Management Studiotesting节点之间的故障转移,当停止节点时,所有事情都成功完成,我仍然能够编写查询。

我开始testing一个使用SQL用户连接的应用程序,每当我切换节点时,我都会login失败。

我相信这个问题的原因是因为服务器login与数据库绑定的SID是不同于导致login失败的其他节点上的服务器login。 请纠正我,如果我不正确的理解这一点。

如果我正确理解这一点,我怎样才能确保服务器loginSID是相同的节点之间? 有没有办法把这个复制过来,或者这个应该怎么做?

我读了一些关于包含数据库的地方,我可以在数据库本身上设置login名,而不是创build一个服务器login名,但我宁愿不沿着这条路线走。

你的直觉很可能是正确的。 您可以运行以下命令validation节点之间的SID是否有所不同:

select name, sid from sys.server_principals 

在每个节点上进行比较。

至于如何让它们保持同步,在创build时这样做(不幸的是,我不知道如何在事后更改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也是如此(这样相同的脚本就可以在所有的服务器上运行),但是我把它作为读者的练习。 🙂