sql >> Database teknologi >  >> RDS >> Database

Begræns en sammenkædet server til et enkelt lokalt login (T-SQL-eksempel)

I denne artikel konfigurerer jeg en linket server i SQL Server, så kun et enkelt lokalt login kan få adgang til den. For at gøre dette sletter jeg alle tilknytninger, der automatisk oprettes, når jeg opretter den linkede server, før jeg tilføjer en login-tilknytning til det enkelte lokale login.

Konfigurer den linkede server og login-kortlægning

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';

Dette eksempel opretter en sammenkædet server kaldet Homer. Det sletter derefter alle login-tilknytninger, der oprettes automatisk, før der tilføjes et login til et specifikt lokalt login kaldet Milhouse.

Til vores formål er den relevante linje i dette eksempel @locallogin='Milhouse' . Dette er linjen, der angiver, at login-tilknytningen skal oprettes for det angivne lokale login (i dette tilfælde 'Milhouse').

Nu vil Milhouse være det eneste lokale login, der kan oprette forbindelse til den sammenkædede server.

Sådan virker det

Når du bruger sp_addlinkedserver for at oprette en linket server i SQL Server, oprettes der automatisk en standardmapping mellem alle logins på den lokale server og eksterne logins på den linkede server. SQL Server bruger legitimationsoplysningerne for det lokale login, når der oprettes forbindelse til den sammenkædede server på vegne af login.

Dette er fantastisk, hvis du rent faktisk vil have disse kortlægninger - det sparer dig for eksplicit at oprette dem. Men hvis du ikke vil have dem, skal du bruge sp_droplinkedsrvlogin at fjerne dem. Det er, hvad jeg gjorde i ovenstående eksempel.

Når du har droppet alle automatisk oprettede login-tilknytninger, er du fri til at bruge sp_addlinkedsrvlogin for at tilføje en tilknytning til et specifikt lokalt login.

Tillade alle lokale logins at dele login-kortlægningen

Du kan også konfigurere det, så alle lokale logins bruger den samme login-mapping (så det ikke kun er begrænset til for eksempel Milhouse). I stedet for at have hvert lokalt login kort til et tilsvarende eksternt login, kan de også bruge det login, du konfigurerer til den sammenkædede server. For at gøre dette skal du blot indstille @locallogin=NULL . Dette gør det muligt for alle lokale logins at oprette forbindelse til den sammenkædede server, uanset om de har et tilsvarende eksternt login på den sammenkædede server.

Se, hvordan logins fungerer på linkede servere for eksempler på forskellige lokale logins, der forsøger at få adgang til et linket server-login under forskellige scenarier.


  1. Jeg kan ikke indstille flere billeder i gittervisning?

  2. Sådan fjerner du kolonneoverskrifterne, når du sender forespørgselsresultater via e-mail i SQL Server (T-SQL)

  3. Returnerer resultat selv for elementer i IN-listen, der ikke findes i tabellen

  4. Konverter String ISO-8601 dato til oracles tidsstempel datatype