sql >> Databasteknik >  >> RDS >> Database

Begränsa en länkad server till en enda lokal inloggning (T-SQL-exempel)

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.


  1. Cast från VARCHAR till INT - MySQL

  2. MariaDB MaxScale Load Balancing på Docker:Implementering:Del ett

  3. Python psycopg2 infogas inte i postgresql-tabellen

  4. PostgreSQL inkrementell säkerhetskopiering och punkt-i-tid-återställning