2013-03-26 2 views
1

В IBM DB2 реализована политика LBAC (управление доступом на основе ярлыков). Я не сталкиваюсь с проблемой при создании или использовании этих политик из браузера запросов. Однако мое требование немного отличается. Используя LBAC, скажем, что я создал необходимые метки безопасности и назначил их столбцам и строкам в таблицах базы данных. Теперь, учитывая контроль доступа для пользователя, я хочу узнать, доступен ли конкретный ярлык этому пользователю.Вычисление политик DB2 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 знает это и представит мне соответствующие результаты, если в качестве пользователя кто-то и пожарные запросы. Но вопрос в том, как я могу (как администратор) знать, какие столбцы/строки будут доступны пользователю кто-то? Может ли эта информация быть извлечена из какой-либо таблицы безопасности или как-то понята?

С уважением,

Salil Joshi

ответ

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) Создайте список меток, разрешенных для пользователя, используя указанные выше конструкции.

Одна небольшая проблема заключается в том, что элементы компонента и созданные на них метки могут иметь одно и то же имя, и я не мог найти для них никакого сопоставления. Я опубликовал эту проблему here за то же самое.

Смежные вопросы