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

Limitare un server collegato a un accesso locale singolo (esempio T-SQL)

In questo articolo, configuro un server collegato in SQL Server in modo che solo un singolo accesso locale possa accedervi. Per fare ciò, elimino tutte le mappature che vengono create automaticamente quando creo il server collegato, prima di aggiungere una mappatura di accesso per il singolo accesso locale.

Configura il server collegato e la mappatura degli accessi

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

Questo esempio crea un server collegato chiamato Homer. Quindi elimina tutte le mappature di accesso create automaticamente, prima di aggiungere un accesso per un accesso locale specifico chiamato Milhouse.

Per i nostri scopi, la riga pertinente in questo esempio è @locallogin='Milhouse' . Questa è la riga che specifica che deve essere creata la mappatura dell'accesso per l'accesso locale specificato (in questo caso 'Milhouse').

Ora Milhouse sarà l'unico login locale in grado di connettersi al server collegato.

Come funziona

Quando usi sp_addlinkedserver per creare un server collegato in SQL Server, viene creata automaticamente una mappatura predefinita tra tutti gli accessi sul server locale e gli accessi remoti sul server collegato. SQL Server utilizza le credenziali dell'accesso locale durante la connessione al server collegato per conto dell'accesso.

Questo è fantastico se vuoi davvero queste mappature:ti evita di crearle esplicitamente. Ma se non li vuoi, dovrai usare sp_droplinkedsrvlogin per rimuoverli. Questo è quello che ho fatto nell'esempio sopra.

Una volta eliminate tutte le mappature di accesso create automaticamente, sei libero di utilizzare sp_addlinkedsrvlogin per aggiungere una mappatura per un accesso locale specifico.

Consentire a tutti gli accessi locali di condividere la mappatura degli accessi

Puoi anche configurarlo in modo che tutti gli accessi locali utilizzino la stessa mappatura degli accessi (in modo che non sia limitato solo a Milhouse, ad esempio). Inoltre, invece di avere ogni login locale associato a un login remoto corrispondente, possono usare il login che configuri per il server collegato. Per fare ciò, imposta semplicemente @locallogin=NULL . Ciò consente a tutti gli accessi locali di connettersi al server collegato, indipendentemente dal fatto che abbiano o meno un accesso remoto corrispondente sul server collegato.

Vedere Come funzionano gli accessi sui server collegati per esempi di vari accessi locali che tentano di accedere a un accesso al server collegato in diversi scenari.