複数のロールに対する詳細なロール制限のモデル化¶
ユーザーが複数のロールを持ち、異なる詳細な権限がそれぞれのロールにある場合、さらに考慮すべき事項があります。こうしたロールの組み合わせが複雑な場合、望ましくない動作につながる可能性があるためです。したがって、これらの制限がどのように機能し、どのようなベストプラクティスに従うべきかを理解することが重要になります。
複数のロールに対する詳細なロール制限をモデル化する場合は、主に以下の点に留意してください。
ロールの追加により、ユーザー権限は拡張されますが、制限されることはありません。
ロール R1 と R2 のそれぞれで異なるビューに対して詳細な制限 P1 と P2 を定義した場合、ロール R1 + R2 を持つユーザーが利用できるデータは、R1 が利用できるデータ + R2 が利用できるデータと必ずしも同じとは限りません。
Denodo でビューを実行する場合、ビューに対する実行権限を持つロールの権限が考慮されます。
権限は累積的であり排他的ではない¶
Denodo で複数のロールを管理するときに、最初に理解しておくべきことは、多くのロールベースシステムの場合と同様に、ロールの追加によってユーザー権限は制限されることはなく、拡張されるということです。1 人のユーザーが複数のロールを持つ場合、Denodo で制限が評価されるときに、「ロール R1 に制限 P1 が、別のロール R2 に制限 P2 が適用されているとすると、R1 と R2 を持つユーザーには制限 P1 と P2 が適用される」ものと誤解されがちですが、これは正しくありません。
たとえば、ユーザーが顧客に関するすべての情報を見ることができる ‘customer_service’ ロールと、ユーザーが売上に関するすべての情報を見ることができる ‘sales’ ロールがあるとします。ユーザー Eric が ‘sales’ と ‘customer_service’ の両方のロールを持つ場合、Eric は顧客と売上に関するすべての情報を見ることができます。同様に、'sales_us' というロールがあり、このロールでは米国の顧客だけを見ることができるよう、CUSTOMER に対する行制限が課されているとします。また、ドイツ人顧客に対して同等の制限を課すロール 'sales_de' があるとします。ユーザー Mary が ‘sales_us’ ロールと ‘sales_de’ ロールの両方を持つ場合、Mary は米国とドイツの顧客の売上情報を見ることができます。

ロール R1、R2 を持つユーザーが利用できるデータは、一般的に「R1 が利用できるデータ + R2 が利用できるデータ」に等しいが、必ずしもそうとは限らない¶
あるロールに特定のビューに対する権限があり、別のロールに別のビューに対する権限がある場合、この 2 つのロールが割り当てられたユーザーはどちらのビューにもアクセスできます。これは、前述の例の Eric のケースに該当します。あるロールにビューに対する詳細な制限があり、別のロールに同じビューに対する別の詳細な制限がある場合も同様です。これは、前述の例の Mary のケースに該当します。この場合、ロール ‘sales_us’ と ‘sales_de’ に対する制限はどちらも同じビューの CUSTOMER に対して定義されているため、Denodo では以下のように権限の和結合を計算できます。

ただし、あるビューを実行するための権限が 2 つのロールにあり、
一方のロールでビュー階層内のいずれかのサブビューに対して詳細な制限を定義し、
もう一方のロールで同じ階層の別のサブビューに対して詳細な制限を定義する場合、こうした計算はできません。
この場合は、予想外の結果が生じる可能性があるため、アンチパターンと見なされます。代わりに、同じユーザーに割り当てることができるロールで、同じビューに対する詳細な制限を定義する必要があります。
注釈
同じユーザーに割り当てることができるロールで、同じビューに対する詳細な制限を常に定義する必要があります。同じ階層の別のビューに対して詳細な制限を割り当てると、望ましくない動作につながる可能性があり、セキュリティ管理がさらに複雑になることがあります。
実行エンジンは、クエリビューに対する実行権限を持つロールの権限のみを考慮する¶
Denodo でビューを実行する場合、ビューに対する実行権限を持つロールの権限が考慮されます。これらはクエリに対するアクティブなロールです。この中には、行制限やマスキングのような詳細な権限もあります。また、 間接アクセスの制限 も含まれます。
前のセクションと同じ例で、sales_de のみに SALES_BY_AGE ビューに対する実行権限がある場合、'sales_us' ロールと 'sales_de' ロールを持つユーザーは、ドイツの顧客に関連する結果のみを見ることができます。一方、両方のロールに SALES_BY_AGE ビューに対する実行権限がある場合、そのユーザーはドイツと米国の結果を見ることができます。
アクティブなロールの範囲を上位ビューに対する実行権限を持つロールに制限することで、各ユーザーがビューを実行したときに表示されるデータセットを確実に管理できます。また、セキュリティ管理と 監査 も容易になります。