sql >> Databasteknik >  >> RDS >> Sqlserver

Lägg till en länkad serverinloggning i SQL Server (T-SQL-exempel)

I den här artikeln skapar jag en inloggning för en länkad server i SQL Server. I det här fallet använder jag Transact-SQL (i motsats till att använda ett GUI som SSMS).

För att skapa en inloggning för länkad server, använd sp_addlinkedsrvlogin systemlagrad procedur.

Syntax

Syntaxen ser ut så här:

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

Följande exempel visar hur detta fungerar. För en mer detaljerad förklaring av varje argument, se den officiella Microsoft-dokumentationen.

Exempel 1 – Lägg till en inloggning för den länkade servern

Här är ett exempel på att lägga till en SQL Server-inloggning som heter Maggie för en länkad server som heter Homer:

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

Kör detta på den lokala servern efter att du har skapat den länkade servern. Du behöver en motsvarande inloggning med samma referenser på den faktiska fjärrservern.

Exempel 2 – Inkludera den länkade servern

För fullständighetens skull är den här igen, men den här gången skapar jag först den länkade servern:

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 faktiska (fjärrlänkade) servern har en inloggning med samma referenser, kommer den lokala servern att kunna logga in på den länkade servern.

Exempel 3 – Lägg till inloggningen/användaren på fjärrservern

Som nämnts måste du se till att det finns en motsvarande inloggning på fjärrservern. Du måste också se till att denna inloggning mappas till en databasanvändare med lämpliga behörigheter.

Så i det här fallet kan vi skapa en inloggning på fjärrservern genom att hoppa över till fjärrservern och köra detta:

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

USE Music;
CREATE USER Maggie FOR LOGIN Maggie;

GRANT SELECT ON DATABASE::Music TO Maggie; 

Detta skapar en inloggning som heter Maggie och en motsvarande databasanvändare som heter Maggie. Den ger också SELECT behörigheter till Maggie för musikdatabasen.

Nu när jag har gjort det kommer alla distribuerade frågor som använder denna inloggning att vara begränsade till musikdatabasen.

Ett alternativ till att använda GRANT SELECT ON DATABASE , är att lägga till användaren i db_datareader fast databasroll, eller kanske till en anpassad roll.

Om du skapade den länkade servern innan du skapade inloggningarna och databasanvändarna på fjärrservern, kan du behöva släppa den länkade servern och skapa den igen. Om så är fallet kan du släppa det så här:

EXEC sp_dropserver 'Homer', 'droplogins';

När du har tappat den kan du skapa den länkade servern och dess associerade inloggning igen.

Behöver jag verkligen en länkad serverinloggning?

Det är möjligt att du inte ens behöver lägga till en inloggning som i exemplet ovan.

När du först skapar 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 när den ansluter till den länkade servern för inloggningens räkning.

Så om din lokala inloggning har en motsvarande inloggning på den länkade servern, med samma referenser, och den har lämpliga behörigheter, är du bra att gå. Inget behov av att lägga till en inloggning för den länkade servern.

Med det sagt kan du ha andra skäl att lägga till en separat inloggning, som att lägga till den för andra användare.

Du kanske också vill skapa en inloggningsmappning för en enskild lokal användare, i så fall kan du använda @locallogin argument för att ange den lokala inloggningen som ska mappas.

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. DAYNAME() Exempel – MySQL

  2. MySQL LADDA DATAINFIL med PÅ DUBLIKATNYCKELUPPDATERING

  3. Hur kan jag infoga en bild i en SQLite-databas

  4. Stöder Oracle fulltextsökning?