2017-09-20 12 views
2

データベースにRBAC-RLSセキュリティを実装していますが、質問があります。このシナリオは次のとおりです。同じテーブルの複数のセキュリティ条件(FILTER | BLOCK)

私は、ログインしたユーザーにその特権があるかどうかを確認する1つの入力パラメーター@PermissionIdを持つ関数を持っています。データベース内の各役割は複数の権限に関連付けられ、各ユーザーは複数の役割を持つことができます。

テーブルProductsを持っていて、アクセス許可があるユーザだけがテーブルの内容を表示できるようにしたいとします。

CREATE SECURITY POLICY ReadProducts 
ADD FILTER PREDICATE HasPermission('ReadProducts') ON Products 

そして、それはOKですが、今私はまた、許可SystemAdministratorを持っているし、彼はProductsテーブルの内容を表示する権限をも持っている必要があります。

私はそれをすることになっているように、それがうまくいく、または2つの政策との間に矛盾があるでしょう

CREATE SECURITY POLICY ReadProducts 
ADD FILTER PREDICATE HasPermission('SystemAdministrator') ON Products 

別のポリシーを追加した場合は?

その他の状況では、最初のポリシーに別のフィルタ述語を追加するとどうなりますか?だからそれは次のようになります:

CREATE SECURITY POLICY ReadProducts 
ADD FILTER PREDICATE HasPermission('ReadProducts') ON Products 
ADD FILTER PREDICATE HasPermission('SystemAdmin') ON Products 

これは問題ありませんか?つまり、私がユーザーとしてこれらの2つの特権のいずれかを持っていれば、テーブルProductsの内容を見ることができますか?

答えて

1

私はそれを考え出しました。だからここにある:あなたが同じデータベーステーブルに2つのセキュリティポリシーを持つことができません

、それはあなたが二1を作成できません。 - あなたはエラーが発生します。

また、あなたは、同じセキュリティポリシーで同じテーブルの上に2つのFILTER述語を持つことはできません。 1つのフィルタと、このような3-4ブロック述語とデータベースのテーブルごとにセキュリティポリシーを作成します :

CREATE SECURITY POLICY [Log] 
ADD FILTER PREDICATE [dbo].[HasSecurityPermission]('ReadLog') ON [dbo].[table], 
ADD BLOCK PREDICATE [dbo].[HasSecurityPermission]('AddLog') ON [dbo].[table] AFTER INSERT, 
ADD BLOCK PREDICATE [dbo].[HasSecurityPermission]('EditLog') ON [dbo].[table] BEFORE UPDATE, 
ADD BLOCK PREDICATE [dbo].[HasSecurityPermission]('RemoveLog') ON [dbo].[table] BEFORE DELETE 

ですから、データベースごとに4つの権限を必要とする - あなたは、エラー

ソリューションを取得します彼らは、ユーザーの種類(パブリックユーザー、デモ、システム管理者、スーパーユーザ...)であり、あなたがそれらを持っているしたいの権限に関連付けるように、テーブルと最後にあなたに多くの役割を作成します。

これだけです!

関連する問題