web-dev-qa-db-fra.com

Comment relier les utilisateurs et les connexions dans un groupe de disponibilité?

J'ai un groupe de disponibilité et je dois cartographier certaines connexions sur les utilisateurs de bases de données sur une réplique secondaire active. (Node2) Malheureusement, quand j'essaie de exec sp_change_users_login ou alors alter user with login, Je reçois un message d'erreur me disant que la base de données est en lecture seule. Ce n'est pas une surprise, mais je ne suis pas sûr de la réparer. J'ai essayé d'échouer la nuit dernière, fixant les connexions sur Node2, puis retournez à Node1, mais les mappages de connexion/utilisateur se retrouvent simplement sur Node1. Lorsque je répare celles-ci, les connexions de Node2 sortent à nouveau.

C'est un système de production, donc je ne peux rien faire, je veux juste avant plus tard ce soir. Je n'ai pas rencontré ce problème dans notre laboratoire de test. La différence peut être que j'ai créé les connexions avant de rejoindre les bases de données avant, alors que cette fois, j'ai essayé de les créer par la suite et n'a pas réussi à documenter le processus correctement. Prendre le Ag Down et reconstruire c'est quelque chose que je préfère éviter si je peux.

Le problème a du sens pour moi, je ne sais pas vraiment comment le réparer.

7
Samantha Branham

Ce que vous devrez faire est de vous connecter à l'instance qui a un SID mal assorti et vous devrez recréer le login et spécifier un SID explicite. Par exemple, sur l'instance où vous avez l'utilisateur orphelin et le suivant renvoie l'utilisateur:

exec sp_change_users_login 'report';
go

Copiez le SID de la colonne UserSID. Et si vous avez déjà une connexion existante que vous souhaitez préserver le nom de cette instance, vous ne pouvez pas. Il n'y a aucun moyen de ALTER LOGIN et changer le SID. Donc, vous devrez déposer le login et le recréer:

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

Encore une fois, vous voudrez définir le paramètre sid de CREATE LOGIN au UserSID vous avez extrait de l'exécution sp_change_users_login avec le report.

Remarque : Vous souhaitez définir le mot de passe sur ceci/ces réplica (s) sur identique afin de ne pas avoir de désactivation de mot de passe entre les répliques .

Je suppose que votre (s) identifiant (s) en question est des connexions SQL Server, car cela ne devrait pas être un problème pour les comptes de domaine d'autorisation Windows, car les PEID doivent être identiques sur chaque instance.

Vous pouvez également exploiter contenant des bases de données ici et avoir la base de données principale authentifier au niveau de la base de données. De cette façon, vous n'auriez pas à vous soucier des utilisateurs orphelins.

Voici quelques documents à ce sujet:
[.____] Bol Référence sur la gestion des connexions et des emplois pour les bases de données d'un groupe de disponibilité
[.____] Article KB sur la manière de transférer les connexions et les mots de passe entre les instances de SQL Server

En outre, cela devrait aller sans dire, mais examinez-le dans un environnement de développement/QA pour vérifier et assurer une fonctionnalité correcte avant de frapper la production.

7
Thomas Stringer