2011-09-14 4 views
0

私は現在、データベースを備えたASP.NET MVC3、SQL Server 2008およびEFに基づいたアプリケーションを開発中です。別のデータベースに接続する方法は?

私のアプリケーションでは、すべてのユーザーが自分のSQL Serverデータベースを持っている必要があります。これらのデータベースはすべて同じ構造をしています。

私の顧客はcustomercodeとなります。 fgt。このコードはurlで提供されています。 URLからcustomercodeを取得し、それに応じて接続文字列を設定する方法を知っておく必要があります。ヘルプ


ため

おかげで私の考えはcustomercodeはURLから取得して、アクセスデータのための彼のユーザ名とパスワードを入力するようユーザーに促しされると、データベースに接続することです。 はい、各顧客の接続文字列を格納するデータベースを作成することをお勧めします。 誰でもこのコードを書くことができますか?私はASPに新しいです。私はPHPから来る。

(。私は英語を勉強してい悪い文法については申し訳ありません)

+2

使用するURLは何ですか? –

+1

以下の回答に記載されているように、顧客コードをURLから引き出し、接続文字列を含むテーブルをクエリする中央データベースを作成することができます。そのような文字列の内容(サーバーIP、初期カタログ、ログイン情報など)を完全に制御することができます。 – Godeke

+0

これらのデータベースは同じインスタンスにありますか?各データベースのユーザー資格情報は同じですか? –

答えて

1

始めるためにこのような何かを試してみてください:

あなたの.configでの接続文字列は、このようなものである
string customerCode = Request.QueryString["cust"].ToString(); 

string myNewConnString = ConfigurationManager 
          .ConnectionStrings["MyDatabase"] 
          .ConnectionString 
          .Replace("[placeholder]", customerCode); 

。交換するトークンを置くと仮定しています([placeholder])。

<add name="MyDatabase" 
     connectionString="Data Source=192.168.0.1;Initial Catalog=[placeholder];User ID=foo;Password=bar"  
     providerName="System.Data.SqlClient" /> 
+1

おそらく私は妄想ですが、customerCodeからconnectionstringへのマッピングを含む独立したデータベースを使用することをお勧めします。おそらく非合理だが、エンドユーザーが自分の接続文字列をどのような方法でも調整できるようにすることは、不安を感じる。 – Godeke

+1

@Gode:あなたと私の両方。 –

+0

@Godekeこれは非常に良い点です。これは非常に危険なアプローチです。すべての顧客は、別の顧客のデータにアクセスするために、顧客コードを置き換える必要があります。少なくとも、ログインしている顧客がコードをアクセスしている顧客であることを確認するために、何らかのチェックを行う必要があります。 – WCRC

0

おそらく、sqlshardは複数のデータベースを使用するのに役立つでしょうか?

http://enzosqlshard.codeplex.com/

+0

興味深い考えですが、各ユーザーが水平パーティションになる可能性がありますが、オーバーヘッドやクエリの複雑さが増えている可能性があります。私の推測(唯一の推測)は、異なるデータベースファイルでユーザーデータを完全に隔離しておくことが理にかなっている、いくつかのホスト型ソリューションだということです。 – Godeke

+0

私はあなたの観察に同意します、そしてLadislav Mrnkaと同意します。本当に答えを出すのは難しいです。あなたの推測は、あなたがその状況にいたいと思う唯一の状況になるでしょう。 –

1

、あなたの顧客とその接続文字列をホワイトリストに登録することを提案します。

  • あなたの側にウェブサービスを設定します。
  • デプロイされたアプリケーションは、顧客コードを使用してWebサービスを呼び出します。
  • Webサービスは顧客コードを検証し、有効なconn文字列を返します。
  • お客様のアプリは、メモリ内にconn文字列を保持します(セッション、キャッシュ、whathaveyou)。

これにより、特定の顧客コードに対して常にconn文字列が有効であることを保証できます。あなたは何らかの理由でデータベースにアクセスする際にきめ細かい制御をするでしょう(未払いなど)。あなたのサービスには、あなたが組み込んだキャッシングのおかげでいくつかのヒットがあったでしょう。

0

かなり安全ではないソリューションのようですね。顧客が別の顧客コードをURLに入れたらどうなるでしょうか?顧客の権限を持つ中央データベースがない場合、顧客がそのコードにアクセスできる場合は、どこで検証されますか?

認証と、アプリケーションにアクセスするユーザーが提供されたURLへのアクセス許可を持っていることを検証する一部の中央ストア(追加データベース)が必要です。また、そのようなデータベースが存在するかどうかを検証します。次に、ちょうどSqlConnectionStringBuilderが必要で、データベースの名前(または名前の一部)として顧客コードを使用します。セキュリティ上の理由から、各データベースには、そのデータベースからのみ読み取る権限を持つ個別のSQLアカウントが必要です。このdbアカウントには、暗号化されたパスワードを使用してその中央ストレージに保存することもできます。

顧客コード=データベースを動的に追加または削除することも期待される場合は、さらに複雑になる可能性があります。

あなたはUriに参加する方法を尋ねているので、ASP.NET MVCの経験がほとんどなく、おそらくすべての関連性があるようです。この時点で深刻な問題を抱えているように見えるため、熟練した職場の同僚や上司にアーキテクチャをレビューしてもらう必要があります。また、企業や顧客の評判を著しく損なうおそれのある非常に安全なアプリケーションを開発することもできます。

関連する問題