Dans SQL Server, comment créer une connexion pour un utilisateur existant?

17

J'ai restauré une base de données d'une instance SQL Server sur une autre instance SQL Server. Des utilisateurs ont déjà été ajoutés à la base de données. Mais ils n'ont pas de connexion pour la nouvelle instance SQL Server.

Je sais comment créer de nouvelles connexions pour les nouveaux utilisateurs, mais comment créer des identifiants pour les utilisateurs existants?

epotter
la source

Réponses:

9

Le problème est que la restauration ramène les utilisateurs db de l'instance de serveur d'origine, mais la nouvelle instance ne sait généralement rien de ces connexions utilisateur. Vous les verrez sous Sécurité au niveau de la base de données, mais ils n'ont pas de connexions au niveau du serveur correspondantes.

Vous devez rattacher les utilisateurs de la base de données avec des connexions au serveur sur l'instance sur laquelle vous avez restauré la base de données.

Il y a deux façons de procéder:

  1. Créez de nouvelles connexions pour eux sur la nouvelle instance. Vous devrez ensuite les supprimer en tant qu'utilisateurs de base de données sur la nouvelle instance et ajouter leurs nouvelles connexions. Cela semble étrange étant donné que vous pouvez créer les mêmes noms de connexion, mais les SID (identificateurs de sécurité) seront différents et c'est ce que SQL utilise pour l'identification des utilisateurs. C'est assez facile pour une ou deux connexions.

  2. Si vous souhaitez conserver les mêmes utilisateurs, en conservant les mêmes SID, entre les instances, utilisez la procédure stockée sp_help_revlogin . Copiez le code à partir du lien qui créera les procédures stockées nécessaires et exécutez-le sur le serveur à partir duquel vous souhaitez copier les utilisateurs. Il va générer un script SQL que vous pouvez exécuter sur votre serveur cible pour créer les mêmes utilisateurs qui transportent les SID, les mots de passe, tout. C'est la voie à suivre si vous avez beaucoup d'utilisateurs de base de données dont vous avez besoin pour vous reconnecter sur l'instance cible ou si vous ne connaissez pas les mots de passe pour une ou plusieurs connexions SQL sur l'instance source.

squillman
la source
10

J'exécute toujours la commande sp_change_users_login avec l'action 'Update_One' pour relier l'utilisateur de la base de données avec la connexion au serveur:

sp_change_users_login 'Update_One', 'database user', 'server login"

Aaron Daniels
la source
Cool, je l'ai utilisé: à la EXEC sp_change_users_login 'Auto_Fix', 'User', NULL, 'password';place. :)
user2173353
N'est-ce pas uniquement possible si vous avez à la fois l'utilisateur de la base de données et la connexion au serveur mais que le lien entre eux est rompu?
wenzzzel
2

Voici ce que j'ai trouvé.

Comme squillman a expiré, les utilisateurs sont copiés avec la base de données, mais pas les connexions. Il existe une procédure de magasin appelée sp_change_users_login que vous pouvez utiliser pour résoudre le problème. Les étapes pour le faire sont détaillées dans cet article . Les détails de l'utilisation de la procédure de magasin sont disponibles sur cette page .

epotter
la source
2

Depuis SQL Server 2012, il existe une commande T-SQL pour affecter des utilisateurs existants à de nouvelles connexions. Créez la connexion, mais n'essayez pas de faire des mappages d'utilisateurs (cela échouerait). Exécutez ensuite:

use <existing_database>;
alter user <existing_database_user> with login = <newly_created_login>;

Cela mappera la connexion existante au nouvel utilisateur. Documentation SQL ici: https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-user-transact-sql?view=sql-server-2017

ériger
la source