web-dev-qa-db-ja.com

リンクサーバーのリスク

複数のサーバー上のデータベースからのデータを必要とする新機能を実装しています。これらすべてのサーバーのデータを結合して並べ替えるだけです。頭に浮かぶ2つのオプションは次のとおりです。

  1. リンクサーバーを使用し、1つのサーバーから実行して他のサーバーからデータを収集するデータを結合して並べ替える簡単なクエリを記述します。

  2. アプリケーションを使用してすべてのサーバーからデータを収集し、SQL Serverに送信して並べ替えます(アプリケーションに並べ替えを実装しないでください)。

SQL Server 2008 r2では、アクティブ/アクティブクラスターでサーバーを実行しています。すべてのデータベースに同じ権限があり、1つのデータベース/サーバーにアクセスできる場合は、それらすべてに権限があります。これは一般向けアプリケーションです(ユーザーログインが必要です)。

リンクサーバーを使用するリスクは何ですか?心配すべきセキュリティ上の欠陥はありますか?アクティブ/アクティブクラスターでリンクサーバーを実行するときに問題はありますか?他の方法と比較して、パフォーマンスに重大な問題はありますか?

リンクサーバーについては一般的に否定的な「話題」があるようですが、実際に懸念があると思わせるような具体的な情報は見つかりません。

10
aepheus

リンクサーバーは、影響を考えている限り、非常にうまく機能します。

  1. セキュリティ:重要な考慮事項は、リンクサーバーがある場合、サーバーが危険にさらされると、すべて重大なリスクにさらされることです。ユーザーごとに異なる資格情報を持っている場合でも、異なるサーバー(攻撃ベクトルが漏洩/発見/推測された資格情報である場合、攻撃者が他のリソースにアクセスするのを阻止します)でも、リンクは事実上すべてをバイパスできます。リンクは、他のデータベースをパブリックネットワークから隠している保護もバイパスします。たとえば、1つ以上のサーバーがパブリックインターフェイスにデータを提供していないため、通常、ファイアウォールを介してどのような方法でも見えないような状況です。 「まあ、同じリスクがレプリケーションの問題ではないですか?」と思うかもしれません。答えは「はい」ですbutレプリケーションは個々のアプリケーションデータベース間で行われ、リンクはDBレベルではなくサーバーレベルにあるため、リンクサーバールートは同じサーバー上の他のデータベースを危険にさらす可能性があります(のもちろん、ユーザーのアクセス権を注意深く制御することでこのリスクを軽減できる可能性がありますが、少なくとも計画でそれを認識する必要があります)。セキュリティに関する補足として、サーバーが同じサイトにない場合は、SQL Serverをパブリックインターフェイスで利用できるようにするのではなく、何らかの形のVPNを使用してリンクしてください。

  2. 帯域幅:すべてのサーバーが同じDCにあり、サーバー間のニースで高速な計測されていない接続がある場合、これについて心配する必要はないかもしれませんが、特にユーザーはいくつかの種類のアドホッククエリを実行できます。VPNリンクレベルでの圧縮は、ほとんどのデータセットでここで非常に役立ちますが、これは効率の問題を悪化させる可能性のあるレイテンシの増大を犠牲にすることに注意してください(下記参照)。

  3. 効率:単にデータのチャンクを引き下げる場合、これは大きな問題ではありません(ただし、ロックを検討してください:次のポイントを参照してください)。ただし、結合などで何かを行うとすぐに、クエリプランナーは、リクエストを最適化するために実行できます。サーバーがネットワークレイテンシのために互いにローカルでない場合、非常に低速で実行されるクエリを作成する多くのインデックスシークを行う必要がある場合(ローカルサーバーでも同じ問題が確実に存在しますが、もちろん程度は低くなります)、代わりに、インデックススキャン(帯域幅の使用をトレードオフしてレイテンシの利点を得る)を使用して帯域幅を消費し、ロックを保持している場合(ダーティリードの問題などを回避するため)、これはアプリケーションの他の部分にも影響します。

  4. ロック/同時実行性:サーバーから外れると、クエリの実行時間が増加します。これにより、まだわかっていない可能性があるロックの問題が悪化し、アプリケーションの同時実行性とスケーラビリティが大幅に低下します。ロックの問題に注意を払い、必要に応じてプランナーにヒントを与える、定期的または長時間実行のクロスサーバークエリを使用する場合は、十分に注意する必要があります。

セキュリティとパフォーマンスの問題を管理するための十分な準備が整っている限り、リンクサーバーの使用に関する問題は発生しませんが、同じことを実現するためのより優れた/より安全な/より信頼できる/より安全な方法があります。結果。

13
David Spillett

私は同じ否定的な「バズ」を経験しましたが、リンクサーバーで直面した唯一の問題は、ネットワークを介して大量のデータを簡単にプルできることです。 DBAの観点から見ると、乱用しないと約束したとしても、これを実行できる非DBAがいる場合、これは恐ろしいことです。

あなたの場合、それでもデータを移動する必要があるので、独自のアプリケーションを書くことには何の利点もないようです。非常にシンプルなアクセス許可モデルがあるように思われるため、環境によっては、リンクを必要のない場所で使用しないように特別なアクセス許可を設定する価値があるかもしれません。

1
Matt

リンクサーバーは、開発者にとってほぼ「魔法の」状態を作り出します。ただし、1つのリクエストで5つのサーバーから数十万のレコードを返すことができる1つのクエリでネットワークを圧倒するのは非常に簡単になり、5つのサーバーすべてでレコードをロックすることもできます。 1人のクエリですべてのデータベースをロックする危険性について1人または2人のトップ開発者を訓練するまで、熟練したDBA以外は誰にもクエリを記述させません。

リンクサーバーはドラッグのようなものです。一度使用すると、二度と戻って、なぜ以前にそれらを使用しなかったのか不思議に思うことはありません。問題は一度もありませんでしたが、常に注意してきました。

0
Clark Vera