web-dev-qa-db-ja.com

アプリケーションセキュリティトリミングとデータベースセキュリティトリミング

かなり複雑な会議管理ソリューションがあり、1つの会議にいくつかのタスクやドキュメントなどを含むさまざまな議題が含まれます。また、議題の作成者、議題のレビューア、議題の承認者、アクションに責任を持つユーザーなど、さまざまな役割もあります。ミーティングレベル、アジェンダレベル、またはアクションレベルの参加者がいます。

ユーザーの役割と権限レベルに応じて、ユーザーは自分の権限と責任に関する内容のみを表示できます。ただし、いくつかの問題もあります。たとえば、ユーザーが特定の議題に含まれるアクションの責任を負っている場合、ユーザーは自分のアクションを表示して、議題のタイトルのみを表示する必要がありますが、クリックしてその議題の詳細を表示することはできません。エンドユーザーがページに表示する内容は、会議のステータス(開いているか完了したかなど)およびその他のステータストラッキングによって異なる場合があります。

現在、セキュリティトリミングのクエリは、アプリケーションコードで複数のテーブルを結合するため、非常に複雑です。それは適度に良いパフォーマンスでうまくいきました。これの欠点は、アクセスポイントのセキュリティトリミングを処理するためのコードが同じであることを確認する必要があることです。 行レベルのセキュリティ を使用してDBセキュリティのトリミングについても考えましたが、私が見たところによると、行レベルのセキュリティは、次のようないくつかの固定ルールを使用したデータ分離に基づくセキュリティのトリミングに適しています。

  1. 販売は彼自身の領土の記録にしかアクセスできませんでした。
  2. 看護師は自分の患者の記録にしかアクセスできませんでした
  3. ある部門のユーザーは、自分の部門のレコードにのみアクセスできました

さらに、セキュリティポリシーは1つのテーブルにのみ適用できます。セキュリティポリシーの述語を複数のテーブルから評価できますか?上記のリンクの例は次のとおりです。

CREATE SECURITY POLICY SalesFilter  
ADD FILTER PREDICATE Security.fn_securitypredicate(SalesRep)
ON dbo.Sales  
WITH (STATE = ON);  

この時点では、複雑なセキュリティトリミングをDBセキュリティトリミングにマップする方法を考えることができませんでした。これらすべてをDBにプッシュしたときにセキュリティトリミングの問題が発生した場合に備えて、デバッグについても少し心配しています。専門家はここでいくつかの光を当てることができますか?

さらに、Entity Frameworkを使用していますが、Entity Frameworkがこの複雑な行レベルのセキュリティでどれだけうまく機能するかはまだわかりません。

2
windfly2006

MS SQLの行レベルのセキュリティがきめ細かく、すべてのユースケースを処理するのに十分な柔軟性があるとは思えません。たとえば、タイトルは表示されますが説明は表示されません。また、SQLには、RBACと認証のための包括的なツールキットが実際にはありません。これは、JWTの主張からその行レベルのセキュリティへの長い道のりです。

一方、いくつかのセキュリティ機能をデータベースにプッシュダウンする必要があります。たとえば、ユーザーがアクセスできる会議をロードするには、適切な関数が必要です。そうでない場合は、テーブル全体をメモリにロードする必要があります。

私は、データベースを管理レベルのアクセスオブジェクトストアとして扱い、ビジネスロジックをできるだけ回避するという設計原則を採用します。データベースへの直接アクセスの承認には、他の企業の機密情報またはPII情報と同じ承認が必要です。

エンティティフレームワークは callbacks で役立ちます。

2
Martin K