同じログインを使用して3番目のデータベースを経由して2つのデータベースを接続する方が安全ですか?


18

次のセットアップがあります。

  • デスクトップソフトウェアで使用されるプライベートデータを含む複数の運用データベース
  • プライベートデータベースのデータを必要とするパブリックWebサイトのWebデータベース
  • プライベートデータベースからデータを取得するいくつかのビューとストアドプロシージャを含む中間データベース

現在、WebサイトはWebデータベースにログインし、Webデータベースは中間データベースに接続して、運用データベースでデータを取得したり、ストアドプロシージャを実行したりします。すべてのデータベースは同じSQLインスタンス上にあり、プロセス全体が同じユーザーアカウントを使用します。

ユーザーアカウントには、Webデータベースと中間データベースへのフルアクセスがありますが、プライベートデータベースの特定のビューとストアドプロシージャにのみアクセスできます。

これは、パブリックデータベースをプライベートデータベースに直接接続するよりも本当に安全ですか?

同じログインがすべてのデータベースのデータにアクセスするために使用され、プライベートデータベースで必要なビュー/ SPのみに既に制限されているため、中間データベースは物事を複雑にするためだけにあるようです。削除したいと思っています。


2
仲介者がいます。Web DB上のこれらのプロシージャ/ビュー。パーマが正しく設定されている限り、追加のデータベースは不要な抽象化のように見え、セキュリティにまったく影響しません。
ベンブロッカ

@BenBrockaそれは私が考えていたことですが、完全に削除する前に再確認したかった
レイチェル

回答:


7

ここから1つ飛び出します。

プロセス全体が同じログイン資格情報のセットを使用します

問題

そのため、架空のuserX(Excelを使用したミートサック、またはIIS AppPool Identity)は、いくつかのビューとコードを見ることができます。とにかくuserXは3つのデータベースにセットアップされているため、これらのビューとコードがどのデータベースにあるかは関係ありません。

ただし、このような所有権の連鎖は失われます。

WebDB.dbo.SomeProc呼び出しとしましょうPrivateDB.dbo.SomeTable。UserXには、両方のオブジェクトに対する権限が必要です。これがOneDB.WebGUI.SomeProc使用されていた場合OneDB.dbo.SomeTableOneDB.WebGUI.SomeProc必要な権限のみが必要です。同じ所有者の参照オブジェクトの権限はチェックされません。

注:データベース間の所有権チェーンについては、あまり深く見ていません。昔ながらの「所有権連鎖」をよく知っているだけです

さて、コメント通り、実際に組み合わせることができる2つのデータベースがあります。元々暗示されていた3ではありません。ただし、中間体とWebは組み合わせることができます。

他の「プライベート」データベースはおそらく組み合わせることができますが、それは別の問題になります。「1つまたは複数のデータベース」の詳細については、下のリンクを参照してください

解決?

追加のデータベースがコードコンテナのみである場合、スキーマの方が適しています。

これは、「スキーマ」を使用する必要がある場所で「データベース」を使用したように聞こえます(MySQLの意味ではなく、SQL Serverの意味で)。WebGUIスキーマ、ヘルパーまたは共通スキーマ(中間データベースを置き換える)、デスクトップスキーマがあります。これにより、クライアントに基づいて権限を分離し、データベースを1つだけ持つことができます

1つのデータベース(「所有権の連鎖」に加えて)を使用して、インデックス付きビュー、SCHEMABINDING(私は常に使用します)などを検討し始めることができます。

スキーマの詳細については、次の質問を参照してください。

最後に、「トランザクションの整合性は不要」に基づいて個別のデータベースを用意する理由はありません。これを説明するには、この質問を参照してください。 非dboスキーマと新しいデータベースをいつ使用するかの決定基準


ありがとうございました。Webデータが別のデータベースにある理由はいくつかありますが、最大の理由は、実際には複数のプライベートデータベースがあり、Webがデータを取得するために正しいプライベートデータベースにアクセスすることです。私の主な関心事は、中間データベースが実際にサイトのセキュリティに何かを追加するかどうかを見つけることでした。これまでのところ、複雑さの追加レイヤー以外には何も追加しないように聞こえます。
レイチェル

@Rachel:これは知られていた場合は、「複数のプライベートデータベースは」ビットがいずれかの答えは、特にこれと非常に関連性がある...私は別の何かを言っていると思います
GBN

@レイチェル:なぜあなたは質問で「複数のPrivateDB」に言及していないのですか?それはすべてを変えます...;-\
Fabricio Araujo

@FabricioAraujo 2時間前に質問を編集して、その情報を含めました。当時はデータベースの配置のセキュリティについて質問していましたが、その設計については質問していなかったので、その時点ではそれは重要ではないと思いました。
レイチェル

1
@FabricioAraujo:必要条件は設計を定義するため、設計は安全である前に正しくなければなりません。安全で誤った設計は価値がありません-安全でない正しい設計はいつでも安全にすることができます。
ファブリシオアラウージョ

4

答えは次のとおりです。プライベートデータベースが内部LANの外部から(またはVPNのみを介して)アクセスされない場合、WebSiteの資格情報を使用する人はそのプライベートDBサーバーへのアクセスが制限されるため、このスキームによりセキュリティが追加されます内部ネットワークへの侵入-侵入を発見して穴を塞ぐのに便利な時間です)。

そうでない場合、複雑さ以外には何も追加されないと思います。


編集:

私はあなたの質問を読み違えてきたようなので、私は正しく理解している場合を見てみましょう:IntermDbはちょうどPrivateDBに接続するために、空のデータベースであるORは、データを取得するためにPrivateDBに接続して自身の見解/手順を持っているDBであります?

最初のケースでは、WTF?それをはぎ取る。誰かが怠auditな方法でPrivateDBへのアクセスをプロファイルするために監査したい(そしてWebApp開発者の作業をより難しくする)ことを望まない限り、それは価値がありません。SQLプロファイラは、DB_IDを使用してフィルタリングできます...

2番目のケースでは、以前の答えを維持します。

編集:「同じSQLインスタンス上の3つのデータベースすべてと3つのデータベースすべてに使用されるログインは同じであり、アクセスのみできるため、プライベートDBをパブリックDBに直接接続するよりも安全である方法はまだわかりませんとにかくプライベートデータベースの特定のビューとストアドプロシージャ」。

仲介手段を持つことは、侵入者は、あなたのコード内で掘るしなければならないことを知っている IntermDBのexistanceを-そしてそれは、それはそれはPrivateDB存在を知ることで、あなたのコードを掘るする必要があります。

組織のLAN / WAN内の別のサーバーにPrivateDBを配置すると(可能な場合)、管理者が侵入の試みを検出してブロックするのに十分な時間を与えることができます。シノニムを使用する場合、既存のコードに再構築するだけで適切な場所に移動できるため、この移動はスムーズです。

また、他の利点も得られます。PrivateDBのデータにアクセスするためにすべてのコードがIntermDBを通過する必要があるため、開発者はそれをバイパスしようとはしません。 WebAppDbになります。


セキュリティは、あるサーバーにパブリックDBがあり、別のサーバーにプライベートDBがある場合と同じではないでしょうか?そのスキームに3番目のデータベースを追加すると、セキュリティが向上しますか?私の状況では、3つのデータベースはすべて同じSQLサーバーインスタンスにあります(この情報も質問に追加しました)
レイチェル

編集に応じて、中央のデータベースには独自のビューとプライベートデータベースからデータを返すストアドプロシージャが含まれます。同じSQLインスタンス上の3つのデータベースすべてと3つのデータベースすべてに使用されるログインが同じであり、特定のビューととにかくプライベートデータベースのストアドプロシージャ
レイチェル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.