W tym artykule konfiguruję połączony serwer w SQL Server tak, aby dostęp do niego miał tylko jeden lokalny login. Aby to zrobić, usuwam wszelkie mapowania, które są tworzone automatycznie podczas tworzenia połączonego serwera, przed dodaniem mapowania logowania dla pojedynczego logowania lokalnego.
Skonfiguruj połączony serwer i mapowanie logowania
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';
Ten przykład tworzy połączony serwer o nazwie Homer. Następnie usuwa wszystkie mapowania logowania, które są tworzone automatycznie, przed dodaniem loginu dla konkretnego loginu lokalnego o nazwie Milhouse.
Dla naszych celów odpowiedni wiersz w tym przykładzie to @locallogin='Milhouse'
. Jest to linia, która określa, że mapowanie logowania ma zostać utworzone dla określonego logowania lokalnego (w tym przypadku „Milhouse”).
Teraz Milhouse będzie jedynym lokalnym loginem, który będzie mógł połączyć się z połączonym serwerem.
Jak to działa
Gdy używasz sp_addlinkedserver
aby utworzyć połączony serwer w SQL Server, automatycznie tworzone jest domyślne mapowanie między wszystkimi loginami na serwerze lokalnym a zdalnymi loginami na serwerze linked. SQL Server używa danych logowania lokalnego podczas łączenia się z połączonym serwerem w imieniu logowania.
Jest to świetne, jeśli naprawdę chcesz tych mapowań – oszczędza ci to jawnego ich tworzenia. Ale jeśli nie chcesz je, musisz użyć sp_droplinkedsrvlogin
aby je usunąć. Tak właśnie zrobiłem w powyższym przykładzie.
Gdy usuniesz wszystkie automatycznie utworzone mapowania logowania, możesz użyć sp_addlinkedsrvlogin
aby dodać mapowanie dla określonego logowania lokalnego.
Zezwalanie wszystkim lokalnym loginom na udostępnianie mapowania logowania
Możesz również skonfigurować go tak, aby wszystkie lokalne logowania używały tego samego mapowania logowania (aby nie ograniczać się tylko do Milhouse, na przykład). Ponadto, zamiast odwzorowania każdego lokalnego logowania na odpowiadające mu zdalne logowanie, mogą oni używać loginu skonfigurowanego dla połączonego serwera. Aby to zrobić, po prostu ustaw @locallogin=NULL
. Pozwala to wszystkim lokalnym loginom połączyć się z połączonym serwerem, niezależnie od tego, czy mają odpowiedni zdalny login na połączonym serwerze.
Zobacz Jak działają logowanie na połączonych serwerach, aby zapoznać się z przykładami różnych lokalnych loginów próbujących uzyskać dostęp do połączonego serwera w różnych scenariuszach.