web-dev-qa-db-fra.com

Réduire un utilisateur SQL Server à son identifiant après une restauration avec cet utilisateur

Après avoir effectué une restauration d'une base de données SQL Server (V12.0.2000), j'ai pensé qu'un utilisateur doit être remappé à sa connexion (ce problème semble être appelé utilisateur orphelin). Et l'un des moyens les plus simples de le faire est d'effectuer un:

use [MyDatabase];
alter user MyUser with login = MyUser;

Néanmoins, juste après avoir atteint une restauration, la commande USE échoue parce que j'essaie d'exécuter la commande ci-dessus avec 'MyUser', lequel est celui qui est orphelin ...

Parce que c'est dans un script, je voudrais éviter d'effectuer un restore avec un utilisateur et un alter user Avec un autre utilisateur, afin que le premier utilisateur soit correctement remappé à sa connexion.

Y a-t-il un moyen de le faire avec 'Myuser' (qui pourrait se connecter au maître sans problème)?

Je l'ai essayé en qualifiant pleinement le "myuser" de la manière suivante sans succès:

use master;
alter user MyDatabase.MyUser with login = MyUser;

Avez-vous une idée si cela est possible et comment le faire?

6
Koresh

Malheureusement non. N'oubliez pas qu'une base de données principale et un directeur de serveur sont deux objets distincts. Jusqu'à ce que vous réalisiez l'orphelin, le directeur du serveur MyUser n'a pas accès à MyDatabase même s'il existe un utilisateur orphelin appelé MyUser dans la base de données.

L'autre moyen de corriger un orphelin est de changer le SID du directeur du serveur pour correspondre à celui de la base de données principale. Cela risque de créer des orphelins dans d'autres bases de données et encore plus important dans ce cas, vous devez déposer le capital et le reconstituer avec le nouveau SID. Lequel bien sûr n'est pas possible en utilisant cet identifiant particulier.

Votre seule méthode va être de résoudre ce problème en utilisant un ID distinct avec les autorisations appropriées. Cela pourrait être un ID avec les autorisations Sysadmin (qui auraient des autorisations pour se connecter à la base de données même sans principale base de données associée) ou un identifiant ayant accès à DBO sur la base de données. Notez que ce sont des exemples, il existe plusieurs autres autorisations disponibles qui vous permettront de modifier les directeurs de serveur/de base de données.

3
Kenneth Fisher

Vous pouvez utiliser sp_change_users_login pour mettre à jour le SID de l'utilisateur de la base de données: https://msdn.microsoft.com/en-us/library/ms174378.aspx

Vous pouvez également scripter la connexion du serveur de production à l'aide de sp_help_revlogin, déposez l'utilisateur DR et recréez-le avec le script: https://support.microsoft.com/en-us/kb/918992

2
Michael Brule