2016-07-22 5 views
0

私は、異なるテーブルの列を追加/更新/削除できるユーザーを使用して機能を提供したいアプリケーションがあります。私のアプローチは、各クライアントに異なるデータベースを作成して、テーブルに固有の変更をデータベースに残すことです。SQL Serverのクライアントごとに異なるデータベースを作成することをお勧めしますか?

各クライアントには独自のデータベースがあるので、どのように認証と承認を管理できますか?そのために別のデータベースを作成する必要がありますか?それはアプリケーションのパフォーマンスに影響を与えますか?

編集:認証と承認に使用するアプローチは、ログインページで「アカウント」という追加フィールドを作成することです。このアカウント名はプログラムを正しいデータベースに接続するように案内します。また、各データベースには、自分のユーザーが認証されます。

+1

各クライアントのスキーマを作成し、このクライアントに固有のユーザーにこのスキーマを割り当てます。 – TheGameiswar

+0

編集に関して。はい、あなたはそれを行うことができます。しかし、サブドメインを使うことができます。 Client1.Yourdomain.comはデータベース上でそれらを認証します。Client2.Yourdomain.comはデータベースなどでクライアント2を認証します – Matt

答えて

1

あなたの質問への答えはもちろんである(残念ながら)YesとNo :)

これはマルチテナントデータアーキテクチャとして知られています。

別々のデータベースを持つことは間違いなく素晴らしい設計オプションですが、すべてのクライアント/顧客と共有する1つのデータベースを使用することができ、選択する前に多くの要素を考慮する必要があります。

各デザインにプラスとマイナスがあります。ここで

は、あなたの3不可欠な選択肢

1)各顧客の株式は、同じデータベースおよびデータベーステーブルです。

2)各顧客は同じデータベースを共有しますが、データベース内で独自のスキーマを取得し、それぞれ独自のテーブルセットを取得します。

3)各顧客は独自のデータベースを取得します。

私が本当に好きなのは、別個のデータベースのアプローチですが、データセキュリティです。私の言うことは、すべての顧客が独自のデータベースを取得し、そのためにデータベースを編集/更新/削除するためです。このため、ユーザーのプログラムによるエラーやアプリケーションのセキュリティ違反のために、エンドユーザーが他のユーザーのデータを上書きするリスクはありません。

すべてのユーザーが同じデータベースにいる場合、誤って別の顧客データを取得して公開する可能性があります。あるいは、プライマリキーを画面上のレコードに公開し、適切に保護することを忘れて、パワーユーザーがこのキーを他の顧客に属するキーに非常に簡単に上書きし、別のクライアントデータを公開する可能性があります。

しかし、すべての顧客が実際には1大企業の補助金であり、毎日、週/月/年などの財務情報をロールアップする必要があるとします。 これが該当する場合は、クライアントは報告の悪夢となり、テーブルを共有するデータベースを1つのデータベースにまとめることは、人生をはるかに簡単にするだけです。たとえば、毎日の売上を報告するときは、列を一括して10,000個のデータベースにまとめて合計するのが簡単です。 :)

答えはあなたのアプリケーションとそれが何をしているのかによって異なります。

私は同じデータベースに何万人ものクライアントがいる大規模なエンタープライズシステム上で作業しています。私たちはこれをサポートするために、すべてのデータを非常に慎重に保護するよう非常に配慮しました。

また、お客様のマルチテナントアーキテクチャごとのデータベースをサポートする私の暇な時にサイドプロジェクトでも働いています。

したがって、アプリケーションがどのように行うのか、データをバックアップする方法、データをロールアップする必要があるのか​​などを考慮すると、決定に役立ちます。

このため、MSDNの相続人のGreAの記事: https://msdn.microsoft.com/en-us/library/aa479086.aspx

認証に関するご質問について。

はい、認証用に別個のデータベースを用意することは素晴らしい設計です。顧客が認証すると、認証データベースから認証され、この認証の一環としてデータベースに接続文字列が送信されます。その時点からのすべてのデータは、そのクライアントデータベースから取得されます。

希望しました。 幸運を祈る!

+0

男性、詳細情報のためにたくさんあります。それはまさに私が考えていたものでした。 「マルチテナントアーキテクチャ」を選択した理由は、各クライアントが複数のテーブルのスキーマを変更できるためです。はい、私はすべてのクライアントにその機能を提供し、単一のデータベース内のすべてのクライアントの変更されたスキーマを管理することは、報告よりも大きな悪夢です。私の認証方法に関する私の更新された質問をチェックし、提案してください。 – user728630

関連する問題