Wie verknüpfe ich Benutzer und Anmeldungen in einer Verfügbarkeitsgruppe?

7

Ich habe eine Verfügbarkeitsgruppe eingerichtet und muss einige Anmeldungen Datenbankbenutzern auf einem aktiven sekundären Replikat zuordnen. (Node2) Leider erhalte ich beim Versuch exec sp_change_users_loginoder alter user with logineine Fehlermeldung, dass die Datenbank schreibgeschützt ist. Das ist keine Überraschung, aber ich bin mir nicht sicher, wie ich das beheben soll. Ich habe letzte Nacht versucht, ein Failover durchzuführen, die Anmeldungen auf Knoten 2 zu korrigieren und dann auf Knoten 1 zurückzuschlagen, aber dann sind die Anmelde- / Benutzerzuordnungen auf Knoten 1 einfach falsch. Wenn ich diese behebe, geraten die Anmeldungen von Node2 wieder aus dem Ruder.

Dies ist ein Produktionssystem, daher kann ich bis heute Abend nichts tun, was ich will. Ich bin in unserem Testlabor nicht auf dieses Problem gestoßen. Der Unterschied kann darin bestehen, dass ich die Anmeldungen vor dem Beitritt zu den Datenbanken erstellt habe, während ich diesmal versucht habe, sie anschließend zu erstellen, und den Prozess nicht korrekt dokumentiert habe. Die AG abzubauen und wieder aufzubauen ist etwas, das ich lieber vermeiden würde, wenn ich kann.

Das Problem macht für mich Sinn, ich weiß nur nicht wirklich, wie ich es beheben soll.

Samantha Branham
quelle

Antworten:

7

Sie müssen lediglich eine Verbindung zu der Instanz herstellen, deren SID nicht übereinstimmt, und Sie müssen die Anmeldung neu erstellen und eine explizite SID angeben. Zum Beispiel in dem Fall, in dem Sie den verwaisten Benutzer haben und der Benutzer den folgenden zurückgibt:

exec sp_change_users_login 'report';
go

Kopieren Sie die SID aus der Spalte UserSID. Und wenn Sie bereits ein Login haben, von dem Sie den Namen auf dieser Instanz beibehalten möchten, können Sie dies nicht. Es gibt keine Möglichkeit, ALTER LOGINdie SID zu ändern. Sie müssen also den Login löschen und neu erstellen:

drop login YourLogin;
go

create login YourLogin
with
    password = 'password',
    check_policy = off,     -- simple password and no check policy for example only
    sid = 0xC26909...................;
go

Auch hier möchten Sie den sidParameter von CREATE LOGINauf den UserSIDWert setzen , den Sie bei der Ausführung sp_change_users_loginmit abgerufen haben report.

Hinweis : Sie möchten das Kennwort für dieses / diese Replikat (e) auf dasselbe festlegen, damit zwischen den Replikaten keine Kennwortinkongruenz auftritt.

Ich gehe davon aus, dass es sich bei Ihren hier in Frage kommenden Anmeldungen um SQL Server-Anmeldungen handelt, da dies für Windows Auth-Domänenkonten kein Problem darstellen sollte, da die SIDs auf jeder Instanz gleich sein sollten.

Sie können hier auch die enthaltenen Datenbanken nutzen und den Datenbankprinzipal auf Datenbankebene authentifizieren lassen. Auf diese Weise müssen Sie sich keine Sorgen um verwaiste Benutzer machen.

Hier finden Sie eine Dokumentation dazu:
BOL-Referenz zur Verwaltung von Anmeldungen und Jobs für die Datenbanken einer Verfügbarkeitsgruppe
KB-Artikel zum Übertragen von Anmeldungen und Kennwörtern zwischen Instanzen von SQL Server

Dies sollte auch selbstverständlich sein, aber testen Sie dies in einer Entwicklungs- / QS-Umgebung, um die ordnungsgemäße Funktionalität zu überprüfen und sicherzustellen, bevor Sie mit der Produktion beginnen.

Thomas Stringer
quelle