sql >> Database >  >> RDS >> Sqlserver

Een Linked Server Login toevoegen in SQL Server (T-SQL-voorbeeld)

In dit artikel maak ik een login aan voor een gekoppelde server in SQL Server. In dit geval gebruik ik Transact-SQL (in tegenstelling tot een GUI zoals SSMS).

Gebruik de sp_addlinkedsrvlogin . om een ​​login voor de gekoppelde server aan te maken systeem opgeslagen procedure.

Syntaxis

De syntaxis gaat als volgt:

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

Het volgende voorbeeld laat zien hoe dit werkt. Zie de officiële Microsoft-documentatie voor een meer gedetailleerde uitleg van elk argument.

Voorbeeld 1 – Voeg een login toe voor de gekoppelde server

Hier is een voorbeeld van het toevoegen van een SQL Server-login genaamd Maggie voor een gekoppelde server genaamd Homer:

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

Voer dit uit op de lokale server nadat u de gekoppelde server hebt gemaakt. U hebt een overeenkomstige login nodig met dezelfde inloggegevens op de daadwerkelijke externe server.

Voorbeeld 2 – Voeg de gekoppelde server toe

Voor de volledigheid, hier is het weer, maar deze keer maak ik eerst de gekoppelde 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';

Zolang de daadwerkelijke (externe) gekoppelde server een login heeft met dezelfde inloggegevens, kan de lokale server inloggen op de gekoppelde server.

Voorbeeld 3 – Voeg de login/gebruiker toe op de externe server

Zoals vermeld, moet u ervoor zorgen dat er een overeenkomstige login op de externe server is. U moet er ook voor zorgen dat deze login wordt toegewezen aan een databasegebruiker met de juiste machtigingen.

Dus in dit geval zouden we een login op de externe server kunnen maken door naar de externe server te springen en dit uit te voeren:

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

USE Music;
CREATE USER Maggie FOR LOGIN Maggie;

GRANT SELECT ON DATABASE::Music TO Maggie; 

Dit creëert een login genaamd Maggie en een corresponderende databasegebruiker genaamd Maggie. Het verleent ook SELECT machtigingen voor Maggie voor de muziekdatabase.

Nu ik dat heb gedaan, worden alle gedistribueerde zoekopdrachten met deze login beperkt tot de muziekdatabase.

Een alternatief voor het gebruik van GRANT SELECT ON DATABASE , is om de gebruiker toe te voegen aan de db_datareader vaste databaserol, of misschien naar een aangepaste rol.

Als u de gekoppelde server hebt gemaakt voordat u de aanmeldingen en databasegebruikers op de externe server hebt gemaakt, moet u mogelijk de gekoppelde server verwijderen en opnieuw maken. Als dat zo is, kun je het als volgt neerzetten:

EXEC sp_dropserver 'Homer', 'droplogins';

Eenmaal verwijderd, kunt u de gekoppelde server en de bijbehorende login opnieuw maken.

Heb ik echt een Linked Server-login nodig?

Het is mogelijk dat u niet eens een login hoeft toe te voegen zoals in het bovenstaande voorbeeld.

Wanneer u voor het eerst een gekoppelde server in SQL Server maakt, wordt automatisch een standaardtoewijzing gemaakt tussen alle aanmeldingen op de lokale server en aanmeldingen op afstand op de gekoppelde server. SQL Server gebruikt de referenties van de lokale login bij het verbinden met de gekoppelde server namens de login.

Dus als uw lokale login een corresponderende login heeft op de gekoppelde server, met dezelfde inloggegevens, en het heeft de juiste rechten, dan bent u klaar om te gaan. U hoeft geen login toe te voegen voor de gekoppelde server.

Dat gezegd hebbende, heeft u wellicht andere redenen om een ​​aparte login toe te voegen, bijvoorbeeld voor andere gebruikers.

Mogelijk wilt u ook een login-toewijzing maken voor een enkele lokale gebruiker, in welk geval u de @locallogin kunt gebruiken argument om de lokale login op te geven die moet worden toegewezen.

Zie Hoe aanmeldingen werken op gekoppelde servers voor voorbeelden van verschillende lokale aanmeldingen die proberen toegang te krijgen tot een gekoppelde serveraanmelding in verschillende scenario's.


  1. Equivalent van varchar(max) in MySQL?

  2. Wijzig het wachtwoord op de SA Login in SQL Server (T-SQL-voorbeeld)

  3. Waarschuwing:mysql_result() verwacht dat parameter 1 resource is, boolean gegeven

  4. MySQL-query om kolomnamen te krijgen?