2009-03-30 22 views
6

データベースに接続文字列を格納するというアイデアは、間違った考えですが、最初に聞いてください。 web.configファイルで接続文字列を暗号化するのがベストプラクティスだとわかっていますが、web.configファイルを完全にスキップするだけの場合はどうすればよいでしょうか?Webサービス経由での接続文字列へのアクセス

数ヶ月前に、あるサーバーから別のサーバーにデータベースを移動するように求められました。これは、これらのさまざまなデータベースにアクセスするすべてのプログラムで接続文字列を更新する必要があることを意味していました。これは2年で3回目ですが、データベースをあるサーバーから別のサーバーに移動しなければなりませんでした。だから、私はデータベースに接続文字列を格納し、それぞれのGUIDにWebサービス経由でアクセスするように割り当てることを考えました。 web.configに接続文字列を配置する代わりに、web.configに接続文字列GUIDを格納し、接続文字列を要求できるように接続文字列Webサービスを参照するだけで済みます。暗号化はアプリケーションレベルで実行でき、接続文字列はデータベースに暗号化されて保存されます。

私は概念証明を作成しましたが、それは正常に動作します(ローカルイントラネット上であり、インターネットに公開されていない)。

利点は私には明らかです。 Webアプリケーションに触れることなく接続文字列を素早く更新することができます。つまり、データベース内の接続文字列を編集するためだけにWebアプリケーションを構築し、DBAがそこで使用することができるため、データベースを移動するときにプログラマが気にする必要はありません。

しかし、私が関心を持っているのは興味がありません。私はここのみんながこういうことをやっていると思っていることに興味がありますか?

+0

私はそれが素晴らしいアイデアだとは思わないのですが、質問するのは良い質問だと思います! –

+0

データベースを移動するときにDBAがなぜ開発者を悩ませる必要があるのでしょうか?設定ファイルを更新するだけです。 DBを移動するだけでコードを再構築する必要がある場合は、デザインが悪いです。つまり、非常に広く分散されたシステムを使用している場合、configの集中化には利点があります。 – Joe

+0

私は、デベロッパーがデータベースの移動に煩わされるべきではないことに同意しますが、私がいるところの「DBA」はSQLとSQLサーバーを恐怖に感じます。その声明が沈むのを待ってください。私が実際に冗談を言っていたらいいのに。 – Adam

答えて

4

メインのweb.configから接続文字列を取り出して別の設定ファイルに入れます。このファイルはすべてのアプリケーションで同じになりますので、変更する必要がある場合は、各ファイルを別々に編集するのではなく、すべてのアプリケーションフォルダに同じファイルをコピーして貼り付けてください。

+0

これはWebサービスよりも邪魔に思えます;-P –

+0

こんにちはPiotr、そのコメントを増やせますか?また、接続文字列を格納するファイル全体を他のアプリケーション設定と区別して安全に置き換えることができるという意味だけでなく、一般的なweb.configのメンテナンスも容易になります。 –

1

ウェブサービスが場所を変更するとどうなりますか?とにかく、すべてのweb.configファイルを更新する必要があります。

アプリケーションは同じサーバーにあるのでしょうか、わずかなサーバーに分散していますか?マシンのweb.configsを編集して、多くの反復を省くためにDB接続を含めて編集することができます。

+0

私はあなたに同意していませんが、サービスを移動する必要がある場合は、IPアドレス/ホスト名をそのまま移動してURLをそのまま維持できるかもしれません。 –

+0

@Yanni Dahan:もちろんです。 DNSはすばらしいことです:) – cjk

1

私は2つのことの1つをする傾向があります。 Machine.Configに接続を保存するか、DBサーバーを参照するだけの新しいホスト名を作成します。私はhostsファイルにレコードを入れます。

私のローカルボックスからdev qaまたは本番環境に移動するときに、設定ファイルを変更する必要はありません。

2

私が見ることができる主な欠点は、明白なパフォーマンス上のペナルティ(そして接続文字列をキャッシュした場合)とシングルポイント障害です。これはロードバランシングを行わない限りすべてのアプリケーションに導入される可能性がありますサービス、少し過度のように思われる)

+1

エンタープライズレベルの企業では、負荷分散は過度のものではありません。これらは、ここで大きな利益を得るものです。 –

1

非常に興味深い質問。 私はちょうど同じ考えを持っていたので、私はそれを見つけました。

私にはUDDIと非常によく似ており、可能性のあるセキュリティ強化機能を備えた別の層のインダイレクションを提供しています&メンテナンス性が向上しました(とにかく解決できるシングルポイント障害を除く)。

もちろん、ホスト名の問題を解決するDNSがありますが、そのようなWebサービスでは、誰が質問しているかに応じて異なる接続文字列を返すような信じられない可能性があります。SSL証明書またはユーザー/パスまたはトークン、AD、LDAP、ユーザー役割などのディレクトリサービス - 空が限界です:)

さらに、すべての接続文字列は適切に保護され、興味のあるユーザーの目を引くためにはアクセスできません。

最初はこのアイデアは間違っているように見えますが、私はそれについてもっと考えると、エンタープライズレベルの企業がそのようなソリューションを導入することで多くの利益を得ることができると確信しています。

0

私はこの考えを持っている唯一の人ではありません。私は最近、カスタムアプリケーションとイントラネットサイト(多くのデータベースとサーバーを気にする必要はありません)の組み合わせに関するいくつかの熟考の後、それを熟考し始めました。 WCFサービスは、接続文字列、実際の接続、または単にサーバーとデータベース名など、さまざまな方法でデータベース接続情報を返すように記述することができます。さらに、サービス自体は、さまざまな接続ポイントを管理するために使用できるセントラル補助データベースとテーブルからその情報を取得する必要があります。たとえば、会計データベースの接続、生産または開発などを教えてください。

関連する問題