Rischi del server collegato


10

Sto implementando una nuova funzionalità che richiede dati da database su più server. Devo solo unire i dati di tutti questi server e ordinarli. Le due opzioni che vengono in mente sono:

  1. Utilizzare i server collegati e scrivere una semplice query per unire e ordinare i dati che verranno eseguiti da un server e raccogliere i dati dagli altri.

  2. Utilizzare l'applicazione per raccogliere i dati da tutti i server e rispedirli a SQL Server per ordinare (non si desidera implementare l'ordinamento nell'applicazione).

Eseguiamo i nostri server in cluster attivi / attivi in ​​SQL Server 2008 r2. Tutti i database hanno le stesse autorizzazioni, se si ha accesso a un database / server, si dispone di autorizzazioni per tutti. Questa è un'applicazione pubblica (che richiede l'accesso dell'utente).

Quali sono i rischi legati all'utilizzo di server collegati? Ci sono problemi di sicurezza di cui dovrei preoccuparmi? Vi sono problemi con i server collegati nei cluster attivi / attivi? Ci sarebbero problemi di prestazioni significativi rispetto all'alternativa?

Sembra che ci sia un "ronzio" generale negativo sui server collegati, ma non riesco a trovare nulla di concreto che mi induca a credere che ci siano preoccupazioni reali lì.


Riferimento futuro è meglio non pubblicare domande più volte. Hai già commenti su SO relativi alla tua domanda, puoi semplicemente contrassegnare la domanda per l'attenzione del moderatore e chiedere loro di migrare la domanda su DBA.SE. stackoverflow.com/questions/16045441/linked-server-risks

Risposte:


13

I server collegati possono funzionare molto bene purché tu abbia pensato alle implicazioni:

  1. Sicurezza: una considerazione chiave è che se si hanno server collegati, se uno viene compromesso, sono tutti a rischio significativo. Anche se si dispone di credenziali diverse per ciascun utente server diversi (che impedirebbe a un utente malintenzionato di accedere ad altre risorse se l'unico vettore di attacco fosse trapelato / scoperto / indovinato credenziali) il collegamento può effettivamente bypassare tutto ciò. Il collegamento ignorerà anche le protezioni che nascondono gli altri database dalla rete pubblica, ad esempio una circostanza in cui uno o più server non forniscono dati a un'interfaccia pubblica, pertanto non sarebbero normalmente visibili attraverso i firewall in alcun modo. Potresti pensare "bene, non è lo stesso rischio un problema con la replica?" a cui la risposta è sì, mala replica avviene tra singoli database dell'applicazione e la route del server collegato potrebbe compromettere altri database sullo stesso server poiché il collegamento è a livello di server e non a livello di DB (ovviamente è possibile mitigare questo rischio attraverso un attento controllo dell'accesso dell'utente diritti, ma almeno devi esserne consapevole nella tua pianificazione). Come nota a margine sulla sicurezza: se i server non si trovano nello stesso sito, assicurarsi di utilizzare una qualche forma di VPN per collegarli, anziché rendere disponibile SQL Server su un'interfaccia pubblica.

  2. Larghezza di banda: se tutti i server si trovano nello stesso controller di dominio con una connettività piacevole, veloce e senza limiti tra loro, potresti non doverti preoccupare di questo, ma fai più attenzione con connessioni più distanti soprattutto se i tuoi utenti saranno in grado di eseguire annunci- query ad hoc di una certa varietà. La compressione a livello di collegamento VPN sarà di grande aiuto qui per la maggior parte dei set di dati, ma tenere presente che ciò andrà a scapito di una maggiore latenza che potrebbe aggravare il problema dell'efficienza (vedere di seguito).

  3. Efficienza: se stai semplicemente tirando pezzi di dati lungo la linea, questo non è un grosso problema (ma considera il blocco: vedi il mio prossimo punto), ma non appena fai qualcosa tramite join e così via, ci sono limiti a ciò che il planner delle query può fare per ottimizzare le tue richieste. Se è necessario effettuare molte ricerche di indice che creeranno query a esecuzione molto lenta se i server non sono locali tra loro a causa della latenza della rete (lo stesso problema è sicuramente presente anche per i server locali, ma in misura minore ovviamente), e può invece utilizzare una scansione dell'indice (eliminando l'uso della larghezza di banda per ottenere benefici di latenza) consumando larghezza di banda e se contiene blocchi (per evitare problemi di lettura sporca e così via) ciò influenzerà anche altre parti dell'applicazione.

  4. Blocco / concorrenza: la disattivazione del server aumenta il tempo di esecuzione delle query, il che aggraverà i problemi di blocco che potresti non conoscere ancora di avere e quindi riducendo notevolmente la concorrenza e la scalabilità della tua applicazione. È necessario fare molta attenzione se si utilizzano query cross-server regolari e / o di lunga durata per tenere d'occhio il problema del blocco e fornire suggerimenti per il planner come appropriato.

Fintanto che disponi di disposizioni sufficienti per gestire i problemi di sicurezza e prestazioni, non vedrei alcun problema con l'utilizzo di server collegati, anche se potrebbero esserci modi migliori / più sicuri / più affidabili / più facili da proteggere per ottenere lo stesso risultato.


1

Ho riscontrato lo stesso "ronzio" negativo, ma l'unico problema che ho riscontrato con i server collegati è la facilità con cui è possibile estrarre grandi quantità di dati attraverso la rete. Da un punto di vista DBA questo è spaventoso se hai non DBA che possono farlo, anche se promettono di non abusarne.

Nel tuo caso non sembra esserci alcun vantaggio nello scrivere la tua applicazione in quanto ciò dovrà comunque spostare i dati. Sembra che tu abbia un modello di autorizzazioni molto semplice, quindi a seconda dell'ambiente potrebbe valere la pena impostare alcune autorizzazioni speciali in modo che il collegamento non venga utilizzato dove non è necessario.


0

I server collegati creano uno stato quasi "magico" per gli sviluppatori. Ma può diventare molto semplice travolgere la rete con una query che può restituire centinaia di migliaia di record da 5 server in una richiesta e puoi bloccare anche i record su tutti e 5 i server. Non permetterei a nessuno, ma agli esperti DBA di scrivere le query fino a quando non avrai addestrato 1 o 2 grandi sviluppatori sui pericoli di bloccare tutti i database con una query.

I server collegati sono come una droga, una volta che li usi non tornerai più indietro e ti chiederai perché non li hai mai usati prima. Non ho mai avuto problemi ma sono sempre stato attento.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.