Riscos do servidor vinculado

10

Estou implementando um novo recurso que requer dados de bancos de dados em vários servidores. Eu só preciso unir dados de todos esses servidores e classificá-los. As duas opções que vêm à mente são:

  1. Use servidores vinculados e escreva uma consulta simples para unir e classificar os dados que serão executados em um servidor e coletar dados dos outros.

  2. Use o aplicativo para reunir os dados de todos os servidores e enviá-los de volta ao SQL Server para classificar (não deseja implementar a classificação no aplicativo).

Executamos nossos servidores em clusters ativos / ativos no SQL Server 2008 r2. Todos os bancos de dados têm as mesmas permissões; se você tiver acesso a um banco de dados / servidor, terá permissão para todos. Este é um aplicativo voltado ao público (que requer login do usuário).

Quais são os riscos do uso de servidores vinculados? Existem falhas de segurança com as quais devo me preocupar? Há algum problema na execução de servidores vinculados em clusters ativos / ativos? Haveria problemas significativos de desempenho em comparação com a alternativa?

Parece haver um "burburinho" geral negativo sobre servidores vinculados, mas não consigo encontrar nada concreto que me leve a acreditar que existem preocupações reais por lá.

aepheus
fonte
Referência futura, é melhor não postar perguntas várias vezes. Você já tem comentários sobre a questão, então pode simplesmente sinalizá-la para obter atenção do moderador e pedir que eles migrem a pergunta para o DBA.SE. stackoverflow.com/questions/16045441/linked-server-risks

Respostas:

13

Servidores vinculados podem funcionar muito bem desde que você tenha pensado nas implicações:

  1. Segurança: uma consideração importante é que, se você tiver servidores vinculados, se um deles for comprometido, todos estarão em risco significativo. Mesmo se você tiver credenciais diferentes para cada usuário, servidores diferentes (o que impediria um invasor de obter outros recursos se o único vetor de ataque tivesse vazado / descoberto / adivinhado credenciais), o link pode efetivamente ignorar tudo isso. O link também ignorará as proteções que ocultam os outros bancos de dados da rede pública, como uma circunstância em que um ou mais servidores não estão fornecendo dados a uma interface pública, de modo que normalmente não seriam visíveis pelos firewalls de nenhuma maneira. Você pode pensar "bem, esse mesmo risco não é um problema com a replicação?" para a qual a resposta é sim, masa replicação ocorre entre os bancos de dados de aplicativos individuais e a rota do servidor vinculado pode comprometer outros bancos de dados nos mesmos servidores, pois o link está no nível do servidor e não no nível do banco de dados (é claro que você pode reduzir esse risco controlando cuidadosamente o acesso do usuário direitos, mas você pelo menos precisa estar ciente disso em seu planejamento). Como uma observação secundária sobre segurança: se os servidores não estiverem no mesmo site, use alguma forma de VPN para vinculá-los, em vez de disponibilizar o SQL Server em uma interface pública.

  2. Largura de banda: se todos os servidores estiverem no mesmo controlador de domínio com conectividade agradável, rápida e não-medida entre si, talvez você não precise se preocupar com esse problema, mas tenha mais cuidado com conexões mais distantes, especialmente se seus usuários conseguirem executar consultas hoc de alguma variedade. A compactação no nível do link VPN ajudará bastante aqui para a maioria dos conjuntos de dados, mas lembre-se de que isso ocorrerá às custas de uma maior latência, o que poderia agravar o problema de eficiência (veja abaixo).

  3. Eficiência: se você está simplesmente puxando pedaços de dados para baixo da linha, isso não é um problema enorme (mas considere o bloqueio: veja meu próximo ponto), mas assim que você faz alguma coisa por meio de junções e assim por diante, há limites para o que o planejador de consultas pode fazer para otimizar suas solicitações. Se precisar fazer muitas pesquisas de índice que criarão consultas de execução muito lenta se os servidores não forem locais devido à latência da rede (o mesmo problema também está definitivamente presente para os servidores locais, mas em menor grau, é claro), e pode usar uma varredura de índice (trocando o uso da largura de banda para obter benefícios de latência) que consome largura de banda e, se estiver travando (para evitar problemas de leitura suja e assim por diante), isso também afetará outras partes do aplicativo.

  4. Bloqueio / simultaneidade: Ficar fora do servidor aumentará o tempo de execução das consultas, o que exacerbará os problemas de bloqueio que você ainda não sabe que possui e, portanto, reduzirá drasticamente a simultaneidade e a escalabilidade do aplicativo. Você precisa ter muito cuidado ao usar consultas entre servidores regulares e / ou de longa execução para ficar de olho no problema de bloqueio e fornecer dicas do planejador, conforme apropriado.

Contanto que você tenha provisões suficientes para gerenciar os problemas de segurança e desempenho, não vejo problemas com o uso de servidores vinculados, embora possa haver maneiras melhores / mais seguras / mais confiáveis ​​/ mais fáceis de proteger para obter o mesmo resultado.

David Spillett
fonte
1

Eu experimentei o mesmo "burburinho" negativo, mas o único problema que enfrentei nos servidores vinculados é a facilidade com que você pode extrair grandes quantidades de dados pela rede. Do ponto de vista do DBA, isso é assustador se você tiver não-DBAs que podem fazer isso, mesmo que prometam não abusar.

No seu caso, parece não haver nenhum benefício em escrever seu próprio aplicativo, pois isso ainda precisará mover os dados. Parece que você tem um modelo de permissões muito simples, portanto, dependendo do ambiente, pode valer a pena configurar algumas permissões especiais para que o link não seja usado onde não precisa estar.

Matt
fonte
0

Servidores vinculados criam um estado quase "mágico" para desenvolvedores. Mas pode tornar-se muito fácil sobrecarregar a rede com uma consulta que pode retornar centenas de milhares de registros de 5 servidores em uma solicitação e você também pode bloquear registros nos 5 servidores. Eu não deixaria ninguém, exceto os DBAs experientes, escreverem as consultas até que você tenha treinado 1 ou 2 desenvolvedores principais sobre os perigos de bloquear todos os bancos de dados com uma consulta.

Servidores vinculados são como um medicamento, uma vez que você os utiliza, nunca mais volta e se pergunta por que nunca os usou antes. Eu nunca tive um problema, mas sempre fui cuidadoso.

Clark Vera
fonte