1

IBM DB2には、優れたLBAC(ラベルベースのアクセス制御)ポリシーがあります。クエリブラウザ内からこれらのポリシーを作成または使用するときに問題が発生することはありません。ただし、私の要件は少し異なります。LBACを使用して、必要なセキュリティラベルを作成し、それらをデータベーステーブルの列と行に割り当てたとします。ここで、ユーザーのアクセス制御を前提として、そのユーザーが特定のラベルにアクセスできるかどうかを調べたいと思います。

DB2は内部的にそれを理解し、望ましい結果を生成しますが、各列のセキュリティラベルとともにユーザーのアクセスレベルが与えられている場合、特定の列/行がユーザーにアクセス可能かどうかを教えてくれるソリューションが必要です/行。次のことを行う方法が必要です。

  1. 列のセキュリティラベルを確認します[これを実行できます]
  2. ユーザーに許可されているアクセス制御を確認します[これを実行できます]
  3. これらのセキュリティラベルにユーザーがアクセスできるかどうかを教えてください[これを実現する方法がわかりません]

この例を考えてみましょう。

私のサンプルコンポーネント:

/*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はこれを認識しており、ユーザーとしてログインしてクエリを実行すると、関連する結果が表示されますしかし、問題は、(管理者として)誰かがどの列/行にアクセスできるかをどうやって知ることができるかということです。この情報をセキュリティテーブルから取得したり、何らかの方法で把握したりできますか?

よろしく、

サリルジョシ

4

1 に答える 1

0

この問題の解決策は見つかりませんでした。私が最終的に行ったことは、タイプ「ツリー」および「配列」のセキュリティコンポーネントを見つけ、それらのコンポーネントを一覧表示し、Javaで同等のツリーを再構築することでした。

1)ユーザーに付与されたラベルを確認する

SELECT 
   A.grantee
  ,B.secpolicyname
  ,c.seclabelname 
FROM 
   syscat.securitylabelaccess A
  ,syscat.securitypolicies B
  ,syscat.securitylabels C 
WHERE 
   A.seclabelid = C.seclabelid 
   AND A.secpolicyid = B.secpolicyid 
   AND B.secpolicyid = C.secpolicyid

2)配列とツリーコンポーネントの要素を見つけます。

木の場合:

SELECT 
   D.secpolicyname
  ,B.elementvalue
  ,B.parentelementvalue 
FROM 
   syscat.securitylabelcomponents A
  ,syscat.securitylabelcomponentelements B
  ,syscat.securitypolicycomponentrules C
  ,syscat.securitypolicies D 
WHERE 
   A.compid = B.compid 
   AND A.comptype = 'T' 
   AND A.compid = C.secpolicyid 
   AND C.secpolicyid = D.secpolicyid

配列の場合(注:要素が配列に挿入された順序は見つかりませんでしたが、select *射影()ではなく選択()を実行select A.a, B.b, ...するとここで役立つことがわかりました。より良い解決策を歓迎します):

SELECT * 
FROM 
   syscat.securitylabelcomponents A
  ,syscat.securitylabelcomponentelements B
  ,syscat.securitypolicycomponentrules C
  ,syscat.securitypolicies D 
WHERE 
   A.compid = B.compid 
   AND A.comptype = 'A' 
   AND A.compid = C.compid 
   AND C.secpolicyid = D.secpolicyid

3)上記の構成を使用して、ユーザーに許可されているラベルのリストを生成します。

ここでの小さな問題の1つは、コンポーネント要素とそれらから作成されたラベルが同じ名前ではない可能性があり、それらのマッピングが見つからなかったことです。私は同じようにこの問題をここに投稿しました。

于 2013-03-30T03:58:36.690 に答える