Risques liés aux serveurs liés

10

J'implémente une nouvelle fonctionnalité qui nécessite des données de bases de données sur plusieurs serveurs. J'ai juste besoin d'unir les données de tous ces serveurs et de les trier. Les deux options qui me viennent à l'esprit sont:

  1. Utilisez des serveurs liés et écrivez une requête simple pour réunir et trier les données qui s'exécuteront à partir d'un serveur et rassembleront les données des autres.

  2. Utilisez l'application pour collecter les données de tous les serveurs et renvoyez-les à SQL Server pour les trier (vous ne voulez pas implémenter le tri dans l'application).

Nous exécutons nos serveurs dans des clusters actifs / actifs dans SQL Server 2008 r2. Toutes les bases de données ont les mêmes autorisations, si vous avez accès à une base de données / serveur, vous avez toutes les autorisations. Il s'agit d'une application accessible au public (qui nécessite une connexion utilisateur).

Quels sont les risques liés à l'utilisation de serveurs liés? Y a-t-il des failles de sécurité qui devraient me préoccuper? Existe-t-il des problèmes lors de l'exécution de serveurs liés dans des clusters actifs / actifs? Y aurait-il des problèmes de performances importants par rapport à l'alternative?

Il semble y avoir un "buzz" négatif général sur les serveurs liés, mais je ne trouve rien de concret qui me ferait croire qu'il y a de réelles préoccupations là-bas.

aepheus
la source
Référence future, il est préférable de ne pas poster de questions plusieurs fois. Vous avez déjà des commentaires sur SO concernant votre question, vous pouvez simplement signaler la question à l'attention du modérateur et leur demander de migrer la question vers DBA.SE. stackoverflow.com/questions/16045441/linked-server-risks

Réponses:

13

Les serveurs liés peuvent très bien fonctionner tant que vous en avez réfléchi aux implications:

  1. Sécurité: une considération clé est que si vous avez des serveurs liés, si l'un d'eux est compromis, ils courent tous un risque important. Même si vous avez des informations d'identification différentes pour chaque utilisateur, des serveurs différents (ce qui empêcherait un attaquant d'accéder à d'autres ressources si le seul vecteur d'attaque a été divulgué / découvert / deviné), le lien peut contourner efficacement tout cela. Le lien contournera également les protections qui masquent les autres bases de données du réseau public, comme dans le cas où un ou plusieurs des serveurs ne fournissent pas de données à une interface publique et ne seraient donc normalement pas visibles à travers vos pare-feu par aucun moyen. Vous pourriez penser "eh bien, ce même risque n'est-il pas un problème de réplication?" à laquelle la réponse est oui, maisla réplication se fait entre des bases de données d'application individuelles et la route du serveur lié pourrait compromettre d'autres bases de données sur le même serveur, car le lien est au niveau du serveur et non au niveau de la base de données (bien sûr, vous pouvez atténuer ce risque en contrôlant soigneusement l'accès des utilisateurs) droits, mais vous devez au moins en être conscient dans votre planification). En guise de remarque sur la sécurité: si les serveurs ne sont pas sur le même site, assurez-vous que vous utilisez une forme de VPN pour les lier, plutôt que de rendre SQL Server disponible sur une interface publique.

  2. Bande passante: si tous les serveurs sont dans le même DC avec une connectivité agréable, rapide et non mesurée entre eux, vous n'aurez peut-être pas à vous soucier de celui-ci, mais soyez plus prudent avec des connexions plus distantes, surtout si vos utilisateurs seront en mesure d'exécuter ad- requêtes ad hoc d'une certaine variété. La compression au niveau du lien VPN aidera grandement ici pour la plupart des ensembles de données, mais sachez que cela se fera au détriment d'une plus grande latence qui pourrait exacerber le problème d'efficacité (voir ci-dessous).

  3. Efficacité: si vous tirez simplement des morceaux de données sur la ligne, ce n'est pas un problème majeur (mais envisagez de verrouiller: voir mon point suivant), mais dès que vous faites quoi que ce soit par le biais de jointures et ainsi de suite, il y a des limites à ce que le planificateur de requêtes peut faire pour optimiser vos demandes. S'il doit effectuer de nombreuses recherches d'index qui créeront des requêtes très lentes si les serveurs ne sont pas locaux les uns aux autres en raison de la latence du réseau (le même problème est certainement présent pour les serveurs locaux aussi, mais dans une moindre mesure bien sûr), et il peut utiliser à la place une analyse d'index (échange de l'utilisation de la bande passante pour obtenir des avantages de latence) en mangeant de la bande passante et s'il maintient des verrous (pour éviter les problèmes de lecture sale, etc.), cela affectera également d'autres parties de l'application.

  4. Verrouillage / accès simultané: le fait de quitter le serveur augmentera le temps d'exécution des requêtes, ce qui aggravera les problèmes de verrouillage que vous ne connaissez peut-être pas encore et réduira ainsi considérablement la simultanéité et l'évolutivité de votre application. Vous devez être très prudent si vous utilisez des requêtes interserveurs régulières et / ou de longue durée afin de garder un œil sur le problème de verrouillage et de donner des conseils de planificateur, le cas échéant.

Tant que vous avez suffisamment de dispositions en place pour gérer les problèmes de sécurité et de performances, je ne verrais pas de problème avec l'utilisation de serveurs liés, bien qu'il puisse y avoir des moyens meilleurs / plus sûrs / plus fiables / plus faciles à sécuriser pour y parvenir. résultat.

David Spillett
la source
1

J'ai connu le même "buzz" négatif, mais le seul problème que j'ai rencontré avec les serveurs liés est la facilité avec laquelle vous pouvez extraire de grandes quantités de données sur le réseau. D'un point de vue DBA, cela fait peur si vous avez des non-DBA qui peuvent le faire, même s'ils promettent de ne pas en abuser.

Dans votre cas, il ne semble pas être avantageux d'écrire votre propre application, car cela devra toujours déplacer les données. Il semble que vous ayez un modèle d'autorisations très simple, donc en fonction de l'environnement, il peut être utile de configurer des autorisations spéciales pour que le lien ne soit pas utilisé là où il ne doit pas être.

Mat
la source
0

Les serveurs liés créent un état presque "magique" pour les développeurs. Mais il peut devenir très facile de submerger le réseau avec une seule requête qui peut renvoyer des centaines de milliers d'enregistrements de 5 serveurs en une seule demande, et vous pouvez également verrouiller des enregistrements sur les 5 serveurs. Je ne laisserais personne d'autre que les DBA chevronnés écrire les requêtes jusqu'à ce que vous ayez formé 1 ou 2 meilleurs développeurs sur les dangers de verrouiller toutes les bases de données avec une seule requête.

Les serveurs liés sont comme une drogue, une fois que vous les utilisez, vous ne reviendrez jamais et vous vous demanderez pourquoi vous ne les avez jamais utilisés plus tôt. Je n'ai jamais eu de problème mais j'ai toujours fait attention.

Clark Vera
la source