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

Restreindre un serveur lié à une seule connexion locale (exemple T-SQL)

Dans cet article, je configure un serveur lié dans SQL Server afin qu'une seule connexion locale puisse y accéder. Pour ce faire, je supprime tous les mappages créés automatiquement lorsque je crée le serveur lié, avant d'ajouter un mappage de connexion pour la connexion locale unique.

Configurer le serveur lié et le mappage de connexion

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

EXEC sp_droplinkedsrvlogin 'Homer', NULL;

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

Cet exemple crée un serveur lié appelé Homer. Il supprime ensuite tous les mappages de connexion créés automatiquement, avant d'ajouter une connexion pour une connexion locale spécifique appelée Milhouse.

Pour nos besoins, la ligne pertinente dans cet exemple est @locallogin='Milhouse' . Il s'agit de la ligne qui spécifie que le mappage de connexion doit être créé pour la connexion locale spécifiée (dans ce cas, "Milhouse").

Désormais, Milhouse sera la seule connexion locale capable de se connecter au serveur lié.

Comment ça marche

Lorsque vous utilisez sp_addlinkedserver pour créer un serveur lié 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.

C'est très bien si vous voulez réellement ces mappages - cela vous évite de les créer explicitement. Mais si vous ne le faites pas les voulez, vous devrez utiliser sp_droplinkedsrvlogin pour les supprimer. C'est ce que j'ai fait dans l'exemple ci-dessus.

Une fois que vous avez supprimé tous les mappages de connexion créés automatiquement, vous êtes libre d'utiliser sp_addlinkedsrvlogin pour ajouter un mappage pour une connexion locale spécifique.

Autoriser toutes les connexions locales à partager le mappage de connexion

Vous pouvez également le configurer pour que toutes les connexions locales utilisent le même mappage de connexion (afin qu'il ne soit pas limité à Milhouse, par exemple). De plus, plutôt que d'avoir chaque connexion locale mappée à une connexion distante correspondante, ils peuvent utiliser la connexion que vous configurez pour le serveur lié. Pour ce faire, définissez simplement @locallogin=NULL . Cela permet à toutes les connexions locales de se connecter au serveur lié, qu'elles aient ou non une connexion à distance correspondante sur le serveur lié.

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.