Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Hinzufügen einer Verbindungsserver-Anmeldung in SQL Server (T-SQL-Beispiel)

In diesem Artikel erstelle ich eine Anmeldung für einen Verbindungsserver in SQL Server. In diesem Fall verwende ich Transact-SQL (im Gegensatz zu einer GUI wie SSMS).

Um eine Anmeldung für den Verbindungsserver zu erstellen, verwenden Sie sp_addlinkedsrvlogin gespeicherte Systemprozedur.

Syntax

Die Syntax lautet wie folgt:

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

Das folgende Beispiel zeigt, wie das funktioniert. Eine ausführlichere Erläuterung der einzelnen Argumente finden Sie in der offiziellen Microsoft-Dokumentation.

Beispiel 1 – Fügen Sie ein Login für den verknüpften Server hinzu

Hier ist ein Beispiel für das Hinzufügen einer SQL Server-Anmeldung namens Maggie für einen Verbindungsserver namens Homer:

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

Führen Sie dies auf dem lokalen Server aus, nachdem Sie den Verbindungsserver erstellt haben. Sie benötigen ein entsprechendes Login mit denselben Anmeldeinformationen auf dem tatsächlichen Remote-Server.

Beispiel 2 – Binden Sie den verknüpften Server ein

Der Vollständigkeit halber hier nochmal, aber diesmal erstelle ich zuerst den Linked 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';

Solange der tatsächliche (entfernte) Verbindungsserver über eine Anmeldung mit denselben Anmeldeinformationen verfügt, kann sich der lokale Server beim Verbindungsserver anmelden.

Beispiel 3 – Login/Benutzer auf dem Remote-Server hinzufügen

Wie bereits erwähnt, müssen Sie sicherstellen, dass auf dem Remote-Server ein entsprechender Login vorhanden ist. Sie müssen außerdem sicherstellen, dass diese Anmeldung einem Datenbankbenutzer mit den entsprechenden Berechtigungen zugeordnet ist.

In diesem Fall könnten wir also ein Login auf dem Remote-Server erstellen, indem wir zum Remote-Server springen und Folgendes ausführen:

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

USE Music;
CREATE USER Maggie FOR LOGIN Maggie;

GRANT SELECT ON DATABASE::Music TO Maggie; 

Dadurch wird ein Login namens Maggie und ein entsprechender Datenbankbenutzer namens Maggie erstellt. Es gewährt auch SELECT Berechtigungen an Maggie für die Musikdatenbank.

Jetzt, da ich das getan habe, werden alle verteilten Abfragen, die dieses Login verwenden, auf die Musikdatenbank beschränkt.

Eine Alternative zur Verwendung von GRANT SELECT ON DATABASE , besteht darin, den Benutzer zum db_datareader hinzuzufügen feste Datenbankrolle oder vielleicht zu einer benutzerdefinierten Rolle.

Wenn Sie den Verbindungsserver erstellt haben, bevor Sie die Anmeldungen und Datenbankbenutzer auf dem Remote-Server erstellt haben, müssen Sie den Verbindungsserver möglicherweise löschen und erneut erstellen. Wenn ja, können Sie es wie folgt löschen:

EXEC sp_dropserver 'Homer', 'droplogins';

Nach dem Löschen können Sie den Verbindungsserver und das zugehörige Login erneut erstellen.

Benötige ich wirklich eine Linked-Server-Anmeldung?

Es ist möglich, dass Sie nicht einmal ein Login wie im obigen Beispiel hinzufügen müssen.

Wenn Sie zum ersten Mal einen Verbindungsserver in SQL Server erstellen, wird automatisch eine Standardzuordnung zwischen allen Anmeldungen auf dem lokalen Server und Remoteanmeldungen auf dem Verbindungsserver erstellt. SQL Server verwendet die Anmeldeinformationen des lokalen Anmeldenamens, wenn im Namen des Anmeldenamens eine Verbindung mit dem Verbindungsserver hergestellt wird.

Wenn Ihr lokales Login also ein entsprechendes Login auf dem verknüpften Server mit denselben Anmeldeinformationen hat und es über die entsprechenden Berechtigungen verfügt, können Sie loslegen. Es ist nicht erforderlich, ein Login für den Verbindungsserver hinzuzufügen.

Allerdings haben Sie möglicherweise andere Gründe, ein separates Login hinzuzufügen, z. B. das Hinzufügen für andere Benutzer.

Möglicherweise möchten Sie auch eine Anmeldezuordnung für einen einzelnen lokalen Benutzer erstellen. In diesem Fall können Sie @locallogin verwenden -Argument zur Angabe des zuzuordnenden lokalen Logins.

Unter Funktionsweise von Anmeldungen auf verknüpften Servern finden Sie Beispiele für verschiedene lokale Anmeldungen, die versuchen, unter verschiedenen Szenarien auf eine Anmeldung auf einem verknüpften Server zuzugreifen.