複数のロールに対する詳細なロール制限のモデル化¶
ユーザーが複数のロールを持ち、異なる詳細な権限がそれぞれのロールにある場合、さらに考慮すべき事項があります。こうしたロールの組み合わせが複雑な場合、望ましくない動作につながる可能性があるためです。したがって、これらの制限がどのように機能し、どのようなベストプラクティスに従うべきかを理解することが重要になります。
複数のロールに対する詳細なロール制限をモデル化する場合は、主に以下の点に留意してください。
ロールの追加により、ユーザー権限は拡張されますが、制限されることはありません。
ロール 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 ビューに対する実行権限がある場合、そのユーザーはドイツと米国の結果を見ることができます。
アクティブなロールの範囲を上位ビューに対する実行権限を持つロールに制限することで、各ユーザーがビューを実行したときに表示されるデータセットを確実に管理できます。また、セキュリティ管理と 監査 も容易になります。
Denodo 8.0u20220126 以降での動作の違い¶
更新プログラム 20220126 では、以下のシナリオにおける Denodo の制限の評価方法が変更されています。
あるユーザーには、他のサブビューで構成されているビューの実行を許可する複数のロールがあります。
これらのサブビューの一部については、詳細な制限を課すロール R1 が存在する一方で、同じユーザーの別のロール R2 ではビューの実行権限がありますが、サブビューに対する実行制限も詳細な制限も指定されていません。
このシナリオでは、すべてのロールを考慮して、そのサブビューに対するユーザーの最終的な権限を以下のように計算します。
更新プログラム 20220126 より前までは、R1 で定義された制限がそのサブビューに適用されていました。R2 に対する明示的な権限や制限がないことが、権限がまったくないものと解釈されていたからです。その結果、この状況でこの 2 つのロールを持つユーザーに表示されるデータは、同じユーザーがいずれか 1 つのロールのみを持つ場合よりも少なくなっていました。これは、「ユーザーにロールを追加すると、付与される権限が広がりはしても、狭くなることはない」という原則に反していると考えられます。
更新プログラム 20220126 以降、Denodo では、R1 で定義された制限がそのサブビューに適用されなくなります。つまり、ロール R2 に最上位ビューの実行権限があるため、ロール R2 が最終ビューの計算に使用される限り、そのサブビューからデータを参照できることになります。
前のセクションの例を使用して説明します。
‘customer_service’ ロールには、以下の権限および制限が適用されています。
SALES_BY_AGE に対する実行権限。
SALES に対するマスキング制限。このロールで価格情報を見ることができないようにします。
‘vip_cust_service’ ロールには、以下の制限が適用されています。
SALES_BY_AGE に対する実行権限。
VIP 顧客のデータにのみアクセスできるようにするための、CUSTOMER_US と CUSTOMER_DE に対する行制限。
ユーザー Sunita は、‘customer_service’ と ‘vip_cust_service’ の両方のロールを持っています。
Denodo は詳細な制限が定義されたビューでそれらの制限を評価します。そのため、そのエレメントに対する最終的な複合権限を計算するには、各ロールから付与された権限を各ビューについて考慮する必要があります。
この例では、ロール ‘customer_service’ に SALES に対するマスキング制限があり、ロール ‘vip_cust_service’ には、そのビューに対する実行権限や制限が定義されていません。同様に、CUSTOMER_US ではロール ‘vip_cust_service’ に行制限があり、‘customer_service’ には実行権限や特定の制限がありません。
8.0u20210715 以前のバージョンの場合: SALES に対するマスキングと、行制限が適用されます。その結果、この 2 つのロールを持つユーザーには、VIP 顧客の情報のみが表示され、販売価格はマスクされます。表示されるデータは同じユーザーがいずれか 1 つのロールのみを持つ場合よりも少なくなります。
更新プログラム 8.0u20220126 以降: マスキングも行制限も適用されません。その理由は、最上位のビューに対する実行権限がロールにあることから、そのロールで想定される動作では、ビューにあるデータが何の制限もなく表示されるからです。その結果、このような状況でこの 2 つのロールを持つユーザーは、厳密な和結合や権限よりも多くのデータを見ることができます。ただし、前のセクションで詳しく説明したように、あらゆる条件下で必ずこのような動作になるとは限りません。