IBM DB2には、優れたLBAC(ラベルベースのアクセス制御)ポリシーがあります。クエリブラウザ内からこれらのポリシーを作成または使用するときに問題が発生することはありません。ただし、私の要件は少し異なります。LBACを使用して、必要なセキュリティラベルを作成し、それらをデータベーステーブルの列と行に割り当てたとします。ここで、ユーザーのアクセス制御を前提として、そのユーザーが特定のラベルにアクセスできるかどうかを調べたいと思います。
DB2は内部的にそれを理解し、望ましい結果を生成しますが、各列のセキュリティラベルとともにユーザーのアクセスレベルが与えられている場合、特定の列/行がユーザーにアクセス可能かどうかを教えてくれるソリューションが必要です/行。次のことを行う方法が必要です。
- 列のセキュリティラベルを確認します[これを実行できます]
- ユーザーに許可されているアクセス制御を確認します[これを実行できます]
- これらのセキュリティラベルにユーザーがアクセスできるかどうかを教えてください[これを実現する方法がわかりません]
この例を考えてみましょう。
私のサンプルコンポーネント:
/*Create the component*/
CREATE SECURITY LABEL COMPONENT ORG_DIVISIONS
TREE ('ORGANIZATION_ADMIN' ROOT, --The admin will have the complete access
'SALES' UNDER 'ORGANIZATION_ADMIN', --The sales department will have acess to the financial information for each unit
'RESEARCH' UNDER 'ORGANIZATION_ADMIN', --The research division will have access to technical specs and design along with certain financial information
'RSM1' UNDER 'RESEARCH', --The research manager 1 will have access to certain design and technical specs and certain financial information (depending on the project he is undertaking)
'RS_ENGG1' UNDER 'RSM1', --The research engineer 1 will have access to certain technical specs (depending on the project he is undertaking)
'MANUFACTURING' UNDER 'ORGANIZATION_ADMIN', --The manufacturing unit will have access to design along with certain financial information
'MFM1' UNDER 'MANUFACTURING', --The manufacturing division manager 1 will have access to certain designs along with certain financial information (depending on the project he is undertaking)
'MF_ENGG1' UNDER 'MFM1' --The manufacturing division engineer 1 will have access to certain designs (depending on the project he is undertaking)
)
コンポーネントのサンプルポリシー:
/*Create the policy*/
CREATE SECURITY POLICY ORGANIZATION_POLICY
COMPONENTS ORG_DIVISIONS
WITH DB2LBACRULES
RESTRICT NOT AUTHORIZED WRITE SECURITY LABEL
私のラベルのサンプルセット:
/*Create the labels from the policy components*/
CREATE SECURITY LABEL ORGANIZATION_POLICY.ORGANIZATION_ADMIN
COMPONENT ORG_DIVISIONS 'ORGANIZATION_ADMIN'
CREATE SECURITY LABEL ORGANIZATION_POLICY.SALES
COMPONENT ORG_DIVISIONS 'SALES';
CREATE SECURITY LABEL ORGANIZATION_POLICY.RESEARCH
COMPONENT ORG_DIVISIONS 'RESEARCH';
CREATE SECURITY LABEL ORGANIZATION_POLICY.RSM1
COMPONENT ORG_DIVISIONS 'RSM1';
CREATE SECURITY LABEL ORGANIZATION_POLICY.RS_ENGG1
COMPONENT ORG_DIVISIONS 'RS_ENGG1';
CREATE SECURITY LABEL ORGANIZATION_POLICY.MFM1
COMPONENT ORG_DIVISIONS 'MFM1';
CREATE SECURITY LABEL ORGANIZATION_POLICY.MF_ENGG1
COMPONENT ORG_DIVISIONS 'MF_ENGG1';
私のサンプルユーザー:
/*Use the defined policies and grant accesses to the users*/
GRANT SECURITY LABEL ORGANIZATION_POLICY.RSM1
TO USER someone FOR ALL ACCESS;
これで、ツリーコンポーネントを定義したので、ユーザーはRSM1またはその子ラベル(この場合はRS_ENGG1)のラベルが付いたエンティティにアクセスできます。DB2はこれを認識しており、ユーザーとしてログインしてクエリを実行すると、関連する結果が表示されます。しかし、問題は、(管理者として)誰かがどの列/行にアクセスできるかをどうやって知ることができるかということです。この情報をセキュリティテーブルから取得したり、何らかの方法で把握したりできますか?
よろしく、
サリルジョシ