Database
 sql >> Datenbank >  >> RDS >> Database

Beschränken Sie einen Verbindungsserver auf eine einzelne lokale Anmeldung (T-SQL-Beispiel)

In diesem Artikel konfiguriere ich einen Verbindungsserver in SQL Server so, dass nur eine einzige lokale Anmeldung darauf zugreifen kann. Dazu lösche ich alle Zuordnungen, die automatisch erstellt werden, wenn ich den Verbindungsserver erstelle, bevor ich eine Anmeldezuordnung für die einzelne lokale Anmeldung hinzufüge.

Konfigurieren Sie die verknüpfte Server- und Anmeldezuordnung

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

Dieses Beispiel erstellt einen Verbindungsserver namens Homer. Anschließend werden alle automatisch erstellten Login-Zuordnungen gelöscht, bevor ein Login für ein bestimmtes lokales Login namens Milhouse hinzugefügt wird.

Für unsere Zwecke ist die relevante Zeile in diesem Beispiel @locallogin='Milhouse' . Dies ist die Zeile, die angibt, dass das Login-Mapping für das angegebene lokale Login (in diesem Fall „Milhouse“) erstellt werden soll.

Jetzt ist Milhouse das einzige lokale Login, das sich mit dem verknüpften Server verbinden kann.

Wie es funktioniert

Wenn Sie sp_addlinkedserver verwenden Um einen Verbindungsserver in SQL Server zu 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 Logins, wenn im Namen des Logins eine Verbindung zum Verbindungsserver hergestellt wird.

Das ist großartig, wenn Sie diese Zuordnungen tatsächlich wollen – es erspart Ihnen, sie explizit zu erstellen. Aber wenn Sie es nicht tun möchten, müssen Sie sp_droplinkedsrvlogin verwenden um sie zu entfernen. Das habe ich im obigen Beispiel gemacht.

Sobald Sie alle automatisch erstellten Anmeldezuordnungen gelöscht haben, können Sie sp_addlinkedsrvlogin verwenden um eine Zuordnung für ein bestimmtes lokales Login hinzuzufügen.

Allen lokalen Logins erlauben, die Login-Zuordnung zu teilen

Sie können es auch so konfigurieren, dass alle lokalen Logins dieselbe Login-Zuordnung verwenden (so dass es beispielsweise nicht nur auf Milhouse beschränkt ist). Anstatt jede lokale Anmeldung einer entsprechenden Remote-Anmeldung zuordnen zu müssen, können sie auch die Anmeldung verwenden, die Sie für den Verbindungsserver konfigurieren. Setzen Sie dazu einfach @locallogin=NULL . Dadurch können sich alle lokalen Anmeldungen mit dem Verbindungsserver verbinden, unabhängig davon, ob sie über eine entsprechende Remote-Anmeldung auf dem Verbindungsserver verfügen oder nicht.

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.