Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Ajouter une connexion au serveur lié dans SQL Server (exemple T-SQL)

Dans cet article, je crée une connexion pour un serveur lié dans SQL Server. Dans ce cas, j'utilise Transact-SQL (au lieu d'utiliser une interface graphique telle que SSMS).

Pour créer une connexion pour le serveur lié, utilisez le sp_addlinkedsrvlogin procédure stockée système.

Syntaxe

La syntaxe ressemble à ceci :

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

L'exemple suivant montre comment cela fonctionne. Pour une explication plus détaillée de chaque argument, consultez la documentation officielle de Microsoft.

Exemple 1 - Ajouter une connexion pour le serveur lié

Voici un exemple d'ajout d'une connexion SQL Server appelée Maggie pour un serveur lié appelé Homer :

EXEC sp_addlinkedsrvlogin 
    @rmtsrvname=N'Homer', 
    @useself=N'FALSE', 
    @locallogin=NULL, 
    @rmtuser=N'Maggie', 
    @rmtpassword=N'BigStrong#Passw0rd';

Exécutez ceci sur le serveur local après avoir créé le serveur lié. Vous aurez besoin d'une connexion correspondante avec les mêmes informations d'identification sur le serveur distant réel.

Exemple 2 - Inclure le serveur lié

Par souci d'exhaustivité, le voici à nouveau, mais cette fois, je crée d'abord le serveur lié :

EXEC sp_addlinkedserver 
    @server=N'Homer', 
    @srvproduct=N'', 
    @provider=N'MSOLEDBSQL', 
    @datasrc=N'172.17.0.2',
    @catalog='Music';

EXEC sp_addlinkedsrvlogin 
    @rmtsrvname=N'Homer', 
    @useself=N'FALSE', 
    @locallogin=NULL, 
    @rmtuser=N'Maggie', 
    @rmtpassword=N'BigStrong#Passw0rd';

Tant que le serveur lié réel (distant) a une connexion avec les mêmes informations d'identification, le serveur local pourra se connecter au serveur lié.

Exemple 3 - Ajouter la connexion/l'utilisateur sur le serveur distant

Comme mentionné, vous devrez vous assurer qu'il existe une connexion correspondante sur le serveur distant. Vous devrez également vous assurer que cette connexion correspond à un utilisateur de base de données disposant des autorisations appropriées.

Donc, dans ce cas, nous pourrions créer une connexion sur le serveur distant en sautant sur le serveur distant et en exécutant ceci :

CREATE LOGIN Maggie
    WITH PASSWORD = 'BigStrong#Passw0rd';

USE Music;
CREATE USER Maggie FOR LOGIN Maggie;

GRANT SELECT ON DATABASE::Music TO Maggie; 

Cela crée une connexion appelée Maggie et un utilisateur de base de données correspondant appelé Maggie. Il accorde également SELECT autorisations à Maggie pour la base de données musicale.

Maintenant que j'ai fait cela, toutes les requêtes distribuées utilisant cette connexion seront limitées à la base de données Musique.

Une alternative à l'utilisation de GRANT SELECT ON DATABASE , consiste à ajouter l'utilisateur au db_datareader rôle de base de données fixe, ou peut-être à un rôle personnalisé.

Si vous avez créé le serveur lié avant de créer les connexions et les utilisateurs de la base de données sur le serveur distant, vous devrez peut-être supprimer le serveur lié et le recréer. Si c'est le cas, vous pouvez le déposer comme ceci :

EXEC sp_dropserver 'Homer', 'droplogins';

Une fois déposé, vous pouvez créer à nouveau le serveur lié et son identifiant associé.

Ai-je vraiment besoin d'une connexion à un serveur lié ?

Il est possible que vous n'ayez même pas besoin d'ajouter un identifiant comme dans l'exemple ci-dessus.

Lorsque vous créez un serveur lié pour la première fois dans SQL Server, un mappage par défaut entre toutes les connexions sur le serveur local et les connexions distantes sur le serveur lié est automatiquement créé. SQL Server utilise les informations d'identification de la connexion locale lors de la connexion au serveur lié au nom de la connexion.

Donc, si votre connexion locale a une connexion correspondante sur le serveur lié, avec les mêmes informations d'identification, et qu'elle dispose des autorisations appropriées, vous êtes prêt à partir. Pas besoin d'ajouter une connexion pour le serveur lié.

Cela dit, vous pouvez avoir d'autres raisons d'ajouter une connexion distincte, comme l'ajouter pour d'autres utilisateurs.

Vous pouvez également créer un mappage de connexion pour un seul utilisateur local, auquel cas vous pouvez utiliser le @locallogin argument pour spécifier la connexion locale à mapper.

Voir Fonctionnement des connexions sur les serveurs liés pour des exemples de différentes connexions locales essayant d'accéder à une connexion de serveur lié dans différents scénarios.