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

Tilføj et linket server-login i SQL Server (T-SQL-eksempel)

I denne artikel opretter jeg et login til en linket server i SQL Server. I dette tilfælde bruger jeg Transact-SQL (i modsætning til at bruge en GUI såsom SSMS).

For at oprette et login til den linkede server skal du bruge sp_addlinkedsrvlogin systemlagret procedure.

Syntaks

Syntaksen ser sådan ud:

sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname'   
     [ , [ @useself = ] { 'TRUE' | 'FALSE' | NULL } ]   
     [ , [ @locallogin = ] 'locallogin' ]   
     [ , [ @rmtuser = ] 'rmtuser' ]   
     [ , [ @rmtpassword = ] 'rmtpassword' ]

Det følgende eksempel viser, hvordan dette fungerer. For en mere detaljeret forklaring af hvert argument, se den officielle Microsoft-dokumentation.

Eksempel 1 – Tilføj et login til den sammenkædede server

Her er et eksempel på tilføjelse af et SQL Server-login kaldet Maggie til en forbundet server kaldet Homer:

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

Kør dette på den lokale server, efter du har oprettet den sammenkædede server. Du skal bruge et tilsvarende login med de samme legitimationsoplysninger på den faktiske fjernserver.

Eksempel 2 – Inkluder den sammenkædede server

For fuldstændighedens skyld er den her igen, men denne gang opretter jeg først den linkede server:

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

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

Så længe den faktiske (fjern)forbundne server har et login med de samme legitimationsoplysninger, vil den lokale server være i stand til at logge på den tilknyttede server.

Eksempel 3 – Tilføj login/bruger på fjernserveren

Som nævnt skal du sørge for, at der er et tilsvarende login på fjernserveren. Du skal også sikre dig, at dette login er knyttet til en databasebruger med de relevante tilladelser.

Så i dette tilfælde kunne vi oprette et login på fjernserveren ved at hoppe over til fjernserveren og køre dette:

CREATE LOGIN Maggie
    WITH PASSWORD = 'BigStrong#Passw0rd';

USE Music;
CREATE USER Maggie FOR LOGIN Maggie;

GRANT SELECT ON DATABASE::Music TO Maggie; 

Dette opretter et login kaldet Maggie og en tilsvarende databasebruger kaldet Maggie. Den giver også SELECT tilladelser til Maggie til musikdatabasen.

Nu hvor jeg har gjort det, vil alle distribuerede forespørgsler, der bruger dette login, være begrænset til musikdatabasen.

Et alternativ til at bruge GRANT SELECT ON DATABASE , er at tilføje brugeren til db_datareader fast databaserolle, eller måske til en tilpasset rolle.

Hvis du oprettede den sammenkædede server, før du oprettede login og databasebrugere på fjernserveren, skal du muligvis droppe den sammenkædede server og oprette den igen. Hvis ja, kan du slippe det sådan her:

EXEC sp_dropserver 'Homer', 'droplogins';

Når den er droppet, kan du oprette den linkede server og dens tilhørende login igen.

Har jeg virkelig brug for et linket serverlogin?

Det er muligt, at du ikke engang behøver at tilføje et login som i ovenstående eksempel.

Når du første gang opretter en sammenkædet server i SQL Server, oprettes der automatisk en standardmapping mellem alle logins på den lokale server og fjernlogin på den sammenkædede server. SQL Server bruger legitimationsoplysningerne for det lokale login, når der oprettes forbindelse til den sammenkædede server på vegne af login.

Så hvis dit lokale login har et tilsvarende login på den linkede server, med de samme legitimationsoplysninger, og det har de relevante tilladelser, er du god til at gå. Det er ikke nødvendigt at tilføje et login til den linkede server.

Når det er sagt, kan du have andre grunde til at tilføje et separat login, såsom at tilføje det for andre brugere.

Du vil måske også oprette en login-mapping for en enkelt lokal bruger, i hvilket tilfælde du kan bruge @locallogin argument for at angive det lokale login, der skal kortlægges.

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. Tjek om der findes en tabel i SQL Server

  2. 2 måder at liste alle triggere i en PostgreSQL-database

  3. Problemer med at indstille en tilpasset primær nøgle i en Rails 4-migrering

  4. Hvad er brugen af ​​DECODE-funktionen i SQL?