I den här artikeln konfigurerar jag en länkad server i SQL Server så att endast en enda lokal inloggning kan komma åt den. För att göra detta tar jag bort alla mappningar som skapas automatiskt när jag skapar den länkade servern, innan jag lägger till en inloggningsmappning för den enda lokala inloggningen.
Konfigurera den länkade servern och inloggningsmappningen
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';
Detta exempel skapar en länkad server som heter Homer. Den tar sedan bort alla inloggningsmappningar som skapas automatiskt, innan en inloggning läggs till för en specifik lokal inloggning som heter Milhouse.
För våra ändamål är den relevanta raden i detta exempel @locallogin='Milhouse'
. Det här är raden som anger att inloggningsmappningen ska skapas för den angivna lokala inloggningen (i det här fallet 'Milhouse').
Nu kommer Milhouse att vara den enda lokala inloggningen som kan ansluta till den länkade servern.
Så fungerar det
När du använder sp_addlinkedserver
för att skapa en länkad server i SQL Server skapas automatiskt en standardmappning mellan alla inloggningar på den lokala servern och fjärrinloggningar på den länkade servern. SQL Server använder inloggningsuppgifterna för den lokala inloggningen vid anslutning till den länkade servern på uppdrag av inloggningen.
Det här är bra om du verkligen vill ha dessa mappningar – det besparar dig från att explicit skapa dem. Men om du inte gör det vill ha dem måste du använda sp_droplinkedsrvlogin
för att ta bort dem. Det är vad jag gjorde i exemplet ovan.
När du har tagit bort alla automatiskt skapade inloggningsmappningar är du fri att använda sp_addlinkedsrvlogin
för att lägga till en mappning för en specifik lokal inloggning.
Tillåta alla lokala inloggningar att dela inloggningsmappningen
Du kan också konfigurera det så att alla lokala inloggningar använder samma inloggningsmappning (så att det inte bara är begränsat till till exempel Milhouse). Dessutom kan de använda inloggningen som du konfigurerar för den länkade servern, istället för att ha varje lokal inloggning karta till en motsvarande fjärrinloggning. För att göra detta, ställ bara in @locallogin=NULL
. Detta tillåter alla lokala inloggningar att ansluta till den länkade servern, oavsett om de har en motsvarande fjärrinloggning på den länkade servern.
Se Hur inloggningar fungerar på länkade servrar för exempel på olika lokala inloggningar som försöker komma åt en länkad serverinloggning under olika scenarier.