Partager via


sp_addlinkedsrvlogin (Transact-SQL)

Crée ou met à jour un mappage entre une connexion sur l'instance locale de SQL Server et un compte de sécurité sur un serveur distant.

Icône Lien de rubriqueConventions de syntaxe Transact-SQL

Syntaxe

sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname' 
     [ , [ @useself = ] 'TRUE' | 'FALSE' | 'NULL'] 
     [ , [ @locallogin = ] 'locallogin' ] 
     [ , [ @rmtuser = ] 'rmtuser' ] 
     [ , [ @rmtpassword = ] 'rmtpassword' ] 

Arguments

  • [ @rmtsrvname = ] 'rmtsrvname'
    Nom d'un serveur lié auquel s'applique le mappage de la connexion. rmtsrvname est de type sysname sans valeur par défaut.

  • [ @useself = ] 'TRUE' | 'FALSE' | 'NULL'
    Détermine si la connexion à rmtsrvname doit être réalisée en empruntant l'identité des connexions locales ou en envoyant explicitement un nom d'accès et un mot de passe. Le type de données est varchar(8), avec TRUE comme valeur par défaut.

    La valeur TRUE spécifie que les connexions utilisent leurs propres informations d'identification pour se connecter à rmtsrvname. Les arguments rmtuser et rmtpassword sont ignorés. La valeur FALSE spécifie que les arguments rmtuser et rmtpassword sont utilisés pour la connexion à rmtsrvname pour l'argument locallogin spécifié. Si rmtuser et rmtpassword sont également définis avec une valeur NULL, aucune connexion et aucun mot de passe n'est utilisé pour la connexion au serveur lié.

  • [ @locallogin = ] 'locallogin'
    Connexion sur le serveur local. locallogin est de type sysname. Sa valeur par défaut est NULL. La valeur NULL spécifie que cette entrée s'applique à l'ensemble des connexions locales établies avec l'argument rmtsrvname. Si sa valeur par défaut n'est pas NULL, locallogin peut être une connexion SQL Server ou une connexion Windows. La connexion Windows doit être autorisée à accéder à SQL Server directement ou par l'intermédiaire de son appartenance à un groupe Windows qui a une autorisation d'accès.

  • [ @rmtuser = ] 'rmtuser'
    Connexion distante utilisée pour se connecter à rmtsrvname lorsque @useself a la valeur FALSE. Lorsque le serveur distant est une instance de SQL Server qui n'utilise pas l'authentification Windows, l'argument rmtuser est un nom de connexion SQL Server. rmtuser est de type sysname, avec NULL comme valeur par défaut.

  • [ @rmtpassword = ] 'rmtpassword'
    Mot de passe associé à rmtuser. rmtpassword est de type sysname, avec NULL comme valeur par défaut.

Valeurs des codes de retour

0 (succès) ou 1 (échec)

Notes

Lorsqu'un utilisateur accède au serveur local et exécute une requête distribuée qui interroge une table sur le serveur lié, le serveur local doit se connecter au serveur lié à la place de l'utilisateur pour accéder à cette table. Utilisez sp_addlinkedsrvlogin pour spécifier les informations d'identification que le serveur local utilise pour se connecter au serveur lié.

[!REMARQUE]

Pour créer les meilleurs plans de requête lorsque vous utilisez une table sur un serveur lié, le processeur de requêtes doit posséder des statistiques de distribution de données du serveur lié. Les utilisateurs avec des autorisations limitées sur les colonnes de la table peuvent ne pas disposer des autorisations suffisantes pour obtenir toutes les statistiques utiles. Ils peuvent de surcroît recevoir un plan de requête moins efficace et bénéficier de performances médiocres. Si le serveur lié est une instance de SQL Server, pour obtenir toutes les statistiques disponibles, l'utilisateur doit posséder la table ou être membre du rôle serveur fixe sysadmin, du rôle de base de données fixe db_owner ou du rôle de base de données fixe db_ddladmin sur le serveur lié.

Un mappage par défaut est créé automatiquement entre toutes les connexions sur le serveur local et les connexions distantes sur le serveur lié, par l'exécution de la procédure sp_addlinkedserver. Le mappage par défaut indique que SQL Server utilise les informations d'identification de la connexion locale lors de la connexion au serveur lié. Cela revient à exécuter sp_addlinkedsrvlogin avec la valeur true attribuée à @useself pour le serveur lié, sans spécifier un nom d'utilisateur local. Utilisez la procédure sp_addlinkedsrvlogin uniquement pour modifier le mappage par défaut ou ajouter de nouveaux mappages pour des connexions locales spécifiques. Pour supprimer le mappage par défaut ou tout autre mappage, utilisez la procédure sp_droplinkedsrvlogin.

Au lieu d'utiliser la procédure sp_addlinkedsrvlogin pour créer un mappage de connexion d'accès prédéterminé, SQL Server peut utiliser automatiquement les informations d'identification sécurisées Windows (nom et mot de passe de connexion Windows) d'un utilisateur qui émet une requête pour se connecter à un serveur lié dans les conditions suivantes :

  • L'utilisateur est connecté à SQL Server en utilisant le mode d'authentification Windows.

  • La délégation de compte de sécurité est disponible sur le client et le serveur demandeur.

  • Le fournisseur prend en charge le mode d'authentification Windows (par exemple, SQL Server sous Windows).

[!REMARQUE]

Il n'est pas nécessaire que la délégation soit activée pour les scénarios avec un seul saut. Elle est indispensable pour les scénarios avec plusieurs sauts.

Lorsque l'authentification est effectuée par le serveur lié à l'aide des mappages définis par l'exécution de la procédure sp_addlinkedsrvlogin sur l'instance locale de SQL Server, les autorisations propres à chaque objet dans la base de données distante sont déterminées par le serveur lié et non par le serveur local.

La procédure sp_addlinkedsrvlogin ne peut pas être exécutée dans une transaction définie par l'utilisateur.

Autorisations

Nécessite l'autorisation ALTER ANY LOGIN sur le serveur.

Exemples

A. Établissement des connexions locales au serveur lié avec leurs propres informations d'identification.

Le code exemple suivant crée un mappage pour que toutes les connexions au serveur local soient établies via le serveur lié Accounts avec leurs propres informations d'identification.

EXEC sp_addlinkedsrvlogin 'Accounts'

Ou

EXEC sp_addlinkedsrvlogin 'Accounts', 'true'

[!REMARQUE]

Si des mappages explicites sont créés pour des connexions individuelles, ils sont prioritaires sur les mappages globaux qui peuvent exister pour ce serveur lié.

B. Établissement d'une connexion spécifique au serveur lié en utilisant d'autres informations d'identification.

Le code exemple suivant crée un mappage pour que l'utilisateur Windows Domain\Mary se connecte au serveur lié Accounts en utilisant le nom de connexion MaryP et le mot de passe d89q3w4u.

EXEC sp_addlinkedsrvlogin 'Accounts', 'false', 'Domain\Mary', 'MaryP', 'd89q3w4u'
Remarque relative à la sécuritéRemarque relative à la sécurité

Cet exemple n'utilise pas l'authentification Windows. Les mots de passe sont transmis sans être chiffrés. Les mots de passe peuvent être visibles dans les définitions des sources de données et les scripts enregistrés sur disque, dans les sauvegardes et dans les fichiers journaux. N'utilisez jamais le mot de passe d'un administrateur pour ce type de connexion. Consultez votre administrateur réseau pour des conseils de sécurité propres à votre environnement.