2

私は小さな会社で働いており、複数のクライアントの機密データを Microsoft SQL サーバーに保存するためのソリューションを見つけようとしています。実際、これは一般的なデータベースの質問であり、MSSQL に固有のものではないように感じます。

これまでは、クライアント データがファイル システムのクライアントのルート ディレクトリに db ファイル (フラット ファイル) として保存される独自のデータベースを使用してきました。そのため、オペレーティング システムのアクセス許可により、クライアント X が使用するアプリケーションがクライアント Y のデータベースからデータを取得できないことが保証されます。ここにはデータベース サーバー/インスタンス/エンジンがないことに注意してください…</p>

ただし、私のプロジェクトでは SQL データベースを使用したいと考えています。しかし、セキュリティ担当者は、さまざまなクライアントのデータを 1 つのデータベースに置くことに懸念を表明しています。

1 つのオプションは、クライアントごとに個別のデータベース インスタンスを作成することです。ただし、このアイデアが拡張可能かどうかはわかりません。

だから私の質問は:

1) MSSQL には、データベースを「別々に」SQL サーバーで使用される異なるファイルに格納できるメカニズムはありますか?

2) クライアント X とクライアント Y のデータベースを持つデータベース インスタンスが 1 つだけあるとします。クライアント X の要求が (誤って) クライアント Y のデータベースに誤って送信されないようにするにはどうすればよいですか? どのデータベースから取得するかを決定するために、コード内のパラメーターに依存したくありません。:)

では、クエリが間違ったクライアント テーブルから取得するように誤って指示されないことを保証する、確実な認証スキームはありますか?

これは非常に一般的な問題であり、これには適切な解決策が必要だと思います。他の企業は何をしているのですか?

これについて読むのに良い記事があれば教えてください。

4

1 に答える 1

1

異なるデータベースは常に SQL Server の異なるファイルに格納されるため、これについて特別なことをする必要さえありません。ただし、この場合、クライアントがディスク上のファイルに直接アクセスすることはないため、NTFS アクセス許可は役に立ちません。

SQL Server で考えられる解決策の 1 つは、個別の Windows ユーザー ID のセットを作成し、それらを顧客ごとに個別の SQL ログインにマップすることです。その後、これらのログイン アクセスを適切なデータベースにのみ割り当てることができます。たとえば、クライアント X とクライアント Y の Web サイトをホストしている場合、クライアント X の Web サイトの web.config で接続文字列を設定して、クライアント X のデータベースに適切なログインを使用します。クライアント Y の場合はその逆です。これにより、(ハードコードされたログインを除いて) 何があっても、クライアント X のサイトのコードがクライアント Y のデータベースにアクセスしないことが保証されます。

SQL サーバーの 1 つのインスタンスで 32,000 のデータベースを持つことができ、個別のデータベースを持つことで、多くの改善されたサービス シナリオ (データの問題が発生した場合に他のすべての顧客に影響を与えずに 1 人の顧客の DB を復元するなど) が可能になります。

http://technet.microsoft.com/en-us/library/ms143432.aspx

于 2013-11-03T02:05:07.287 に答える