Тестування безпеки бази даних в Oracle, Інші СУБД, Бази даних, статті

Питання та відповіді щодо забезпечення безпеки бази даних Oracle при використанні можливостей FGA і VPD.

Іспит з новим можливостям для адміністраторів Oracle Database 10 g (Oracle 10g: New Features for Administrators) дозволяє сертифікованим професіоналам Oracle (OCP), що має сертифікат по базі даних Oracle9 i, пролонгувати його для Oracle Database 10 g. Це єдиний іспит, який повинні пройти сертифіковані OCP по Oracle9 i, щоб пролонгувати свій мандат сертифікації до Oracle Database 10 g .

У цій колонці ми зосередимося на можливостях детального аудиту (FGA – fine-grained auditing) і віртуальної приватної бази даних (VPD – virtual private database) в Oracle Database 10g. З’явився в базі даних Oracle9 i детальний аудит (FGA), фіксує для користувача дії на дуже деталізованому рівні і допомагає усунути потребу в ручному аудиті за допомогою тригерів. Вперше з’явилася в базі даних Oracle8 i VPD (відома також як детальний контроль доступу) надає потужні можливості безпеки на рівні рядків.

У колонці представлені типові питання, з якими ви можете зіткнутися при здачі іспиту OCP по новим можливостям Oracle Database 10 g для адміністраторів. Зауважте, що типовий формат питань і код SQL були відкориговані для подання в цій статті.

Детальний аудит

Аудитом називається моніторинг та реєстрація відібраних дій користувача з базою даних. У базі даних Oracle9 i FGA зробив можливою реєстрацію змін на рівні рядків, поряд зі значеннями SCN, для відновлення старих даних. Опція FGA працювала тільки для операторів SELECT, а не для операторів мови DML типу UPDATE, INSERT та DELETE. Наприклад, при використанні FGA в базі даних Oracle9 i, ви могли визначити, що користувач Сміт поновив таблицю SALES, що належить SH, але ви не могли дізнатися, оновив чи користувач Сміт стовпець AMOUNT_SOLD, або побачити значення стовпця AMOUNT_SOLD перед оновленням. В Oracle Database 10 g FGA може також виконувати аудит операторів мови DML.

Встановлювана вами за допомогою FGA політика може контролювати доступ до даних на основі контенту. Використовуючи політику, ви можете вказувати стовпці та умови, для яких ви хочете провести аудит записів. До числа умов може ставитися обмеження аудиту певними типами операторів мови DML, що використовуються у зв’язку із зазначеними вами стовпцями. Ви можете також надати ім’я підпрограми (типу процедури PL / SQL або пакета), яку ви бажаєте викликати в тому випадку, якщо відбувається подія аудиту.

—***—***—

Які два твердження про можливості FGA в Oracle Database 10g є правильними?


  1. Записи FGA зберігаються в таблиці SYS.FGA_LOG $ і доступні через подання DBA_FGA_AUDIT_TRAIL.
  2. Привілей EXECUTE для пакета DBMS_FGA необхідна для того, щоб керувати політикою аудиту FGA.
  3. Для активізації FGA на рівні бази даних необхідно задати параметр ініціалізації AUDIT_TRAIL.
  4. Політику FGA не можна активувати і заблокувати без втрати інформації про метаданих.

Правильні відповіді – A і B. Записи FGA зберігаються в таблиці SYS.FGA_LOG $ і доступні через подання DBA_FGA_AUDIT_TRAIL. Щоб керувати політикою FGA, вам потрібні привілеї EXECUTE для пакета DBMS_FGA. Ви використовуєте інтерфейс DBMS_FGA.ADD_POLICY, щоб визначити кожну політику FGA для таблиці або подання, ідентифікуючи яку комбінацію операторів SELECT, UPDATE, DELETE і INSERT.

Відповідь C неправильний, тому що ви не повинні задати AUDIT_TRAIL для активації детального аудиту. Відповідь D неправильний, тому що ви можете тимчасово активувати або відключити політику FGA, не втрачаючи жодної інформації про метаданих. Для активації та відключення політики аудита ви можете використовувати процедури DBMS_FGA.ENABLE_POLICY і DBMS_FGA.DISABLE_POLICY.

—***—***—

Ви визначаєте наступну політику аудиту:

BEGIN
dbms_fga.add_policy(
object_schema => “HR”,
object_name => “EMP”,
policy_name => “policy_emp_sal_comm”,
audit_condition => NULL,
audit_column => “SALARY,COMMISSION_PCT”,
audit_column_opts=> DBMS_FGA.ALL_COLUMNS,
statement_types => “SELECT, UPDATE”);
END;

Які оператори SQL будуть піддані аудиту в результаті застосування цієї політики аудиту? (Виберіть всі, що підходить.)


  1. UPDATE hr.emp
    SET SALARY = SALARY+ 4000
    WHERE EMP_ID=197;

  2. UPDATE hr.emp
    SET SALARY = SALARY+ 4000,
    COMMISSION_PCT = COMMISSION_PCT+ 0.5
    WHERE COMMISSION_PCT > 0;

  3. SELECT emp_id, salary FROM hr.emp;

  4. DELETE hr.emp WHERE emp_id = 100; 

  5. SELECT * FROM hr.emp; 

Правильні відповіді – B і E. У тому випадку, якщо ви вказуєте для параметра AUDIT_COLUMN_OPTS значення DBMS_FGA.ALL_COLUMNS, записи журналу аудиту будуть створюватися тільки, коли до всіх стовпців, специфікованою параметром AUDIT_COLUMN отримує доступ операція (и), специфіковані (і) для параметра STATEMENT_TYPES. Отже, у наведеному тут прикладі журнал аудиту буде створений, якщо на колонку SALARY і стовпцем COMMISSION_PCT буде виконана операція SELECT або UPDATE.

Відповідь A неправильний, тому що операція UPDATE виконується тільки для стовпця SALARY. Відповідь C неправильний, тому що стовпці SALARY і COMMISSION_PCT не беруть участь у запиті. Відповідь D неправильний, тому що для параметра STATEMENT_TYPES не специфіковані операція DELETE.

—***—***—

Для реалізації звичайного аудиту в Oracle Database 10 g використовується команда AUDIT. Крім того, ви визначаєте політику аудита, використовуючи процедуру DBMS_FGA.ADD_POLICY. Ви зацікавлені в отриманні комбінованого представлення результатів звичайного аудиту та журналу аудиту FGA. Що ви зробите?


  1. Виконайте відповідні процедури в пакеті DBMS_CAPTURE_ADM
  2. Виконайте відповідні процедури в пакеті DBMS_METADATA
  3. Зробите запит до подання словника даних DBA_COMMON_AUDIT_TRAIL
  4. Зробите об’єднаний (UNION) запит до DBA_AUDIT_STATEMENT і DBA_AUDIT_POLICIES

Правильна відповідь – C. Подання словника даних DBA_COMMON_AUDIT_TRAIL є об’єднанням уявлень словника даних DBA_AUDIT_TRAIL і DBA_FGA_AUDIT_TRAIL. Зауважте, що подання DBA_AUDIT_TRAIL надає входи журналу аудиту, а DBA_FGA_AUDIT_TRAIL відображає всі записи аудиту для детального аудиту.

Відповіді A і B неправильні, тому що процедури з пакетів DBMS_CAPTURE_ADM і DBMS_METADATA не надають інформації аудиту. Відповідь D неправильний, тому що для отримання об’єднаної інформації аудиту можна або зробити запит до об’єднання (UNION) уявлень словника даних DBA_AUDIT_TRAIL і DBA_FGA_AUDIT_TRAIL, або зробити запит до подання словника даних DBA_COMMON_AUDIT_TRAIL.

Віртуальна приватна база даних

Віртуальна приватна база даних (Virtual Private Database – VPD) прозоро змінює запити до даних для надання користувачам часткового змісту таблиць, що грунтується на ряді певних критеріїв. Коли користувач прямо чи опосередковано отримує доступ до таблиці, поданням або синоніму, захищеного політикою VPD, сервер динамічно змінює SQL-оператор користувача. При модифікації створюється умова WHERE (предикат), що повертається реалізує політику безпеки функцією. Політика VPD може бути застосована до операторів SELECT, INSERT, UPDATE, INDEX і DELETE.

Розглянемо користувача бази даних, якому дозволено бачити тільки записи службовців з відділу продажів (Sales). Цей користувач виконує наступний запит:

SELECT * FROM emp;

Функція, що реалізує політику безпеки, повертає наступний предикат: division = “SALES”, і база даних прозоро перезаписує запит. Фактично виконується запит буде мати вигляд

SELECT * FROM emp
WHERE division = “SALES”;

Щоб реалізувати VPD, ви можете використовувати пакет DBMS_RLS. Альтернативно, можна використовувати графічний інтерфейс користувача Oracle Policy Manager, доступ до якого отримують з Oracle Enterprise Manager, щоб застосувати політику безпеки до об’єктів схеми.

—***—***—

Ви додали наступну політику VPD:

BEGIN
dbms_rls.add_policy
(object_schema=>”hr”,
object_name => “employees”,
policy_name => “hr_policy”,
function_schema => “hr”,
policy_function => “hr_pol”,
policy_type => dbms_rls.static,
sec_relevant_cols => “sal,comm”);
END;

Які твердження про цю політику є правильними? (Виберіть два.)


  1. Oracle Database повторно обчислює функцію політики під час виконання оператора, якщо вона виявляє зміни контексту з моменту останнього використання курсора.
  2. Функція політики не обчислюється повторно при кожному запиті до таблиці EMPLOYEES.
  3. Політика застосовна тільки до типу оператора SELECT.
  4. Предикати політики кешуються в системній глобальної області (SGA).

Правильними відповідями є B і D . Зауважимо, що POLICY_TYPE специфікований як статичний. Для статичного типу політики функції політики виконуються один раз, і потім кешуються в SGA. Відзначимо, що в попередніх випусках, політика була динамічної, що означало, що база даних виконувала функцію політики для кожного запиту або оператора мови DML. На додаток до динамічної політиці Oracle Database 10 g надає статичну і контекстно-залежну політики. Ці типи політик забезпечують засіб для поліпшення продуктивності сервера, тому що вони не завжди повторно запускають функції політики для кожного оператора мови DML і можуть бути спільно використані багатьма об’єктами бази даних.

Відповідь A неправильний, тому що установка параметра POLICY_TYPE на CONTEXT_SENSITIVE змушує базу даних під час виконання оператора переоцінювати функцію політики, якщо вона виявила зміни контексту з моменту останнього використання курсора. Відповідь C неправильний, тому що політика застосовна до операторів SELECT, INSERT, UPDATE і DELETE, якщо не визначений параметр STATEMENT_TYPES.

—***—***—

Користувач Сміт визначає політику, як це показано нижче:

BEGIN
dbms_rls.add_policy(object_schema =>”scott”,
policy_name => “sp1″,
function_schema =>”pol_chk”,
policy_function => “pf_sal_comm”,
statement_types => “SELECT”,
sec_relevant_cols => “sal,comm”,
sec_relevant_cols_opt =>
DBMS.RLS.ALL_ROWS);
END;

Сміт визначив параметр SEC_RELEVANT_COLS_OPT процедури DBMS_RLS.ADD_POLICY як DBMS_RLS.ALL_ROWS. Сміт встановив параметр SEC_RELEVANT_COLS_OPT як DBMS_RLS.ALL_ROWS, щоб _________


  1. Дозволити користувачеві SYSTEM бачити всі рядки незалежно від предиката, повернутого функцією політики
  2. Дозволити будь-якому користувачеві з привілеєм SELECT ANY TABLE бачити всі рядки, незалежно від предиката, повернутого функцією політики
  3. Гарантувати, що політика активована, тільки якщо стовпчики SAL і COMM не мають якихось порожніх значень в будь-яких рядках
  4. Реалізувати маскування стовпця

 

Правильна відповідь – D. Якщо визначити параметр SEC_RELEVANT_COLS_OPT процедури DBMS_RLS.ADD_POLICY рівним DBMS_RLS.ALL_ROWS, буде реалізовано маскування стовпця VPD. Маскування шпальти – це нова опція, введена в Oracle Database 10 g. Поведінка VPD при маскировании стовпця істотно відрізняється від усіх інших політик VPD, які повертають тільки підмножина рядків. При маскировании стовпця повертаються всі рядки, певні запитом користувача, але значення конфіденційних стовпців з’являться як NULL.

Відповіді A, B і C неправильні. Користувач SYSTEM звільнений від будь-якої політики безпеки. Ви не повинні встановлювати SEC_RELEVANT_COLS_OPT => DBMS_RLS.ALL_ROWS, щоб дати можливість користувачу SYSTEM побачити всі рядки. Установка SEC_RELEVANT_COLS_OPT => DBMS_RLS.ALL_ROWS не активує для користувача з привілеєм SELECT ANY TABLE можливість бачити всі рядки, незалежно від предиката, повернутого функцією політики. Крім того, це не накладає ніяких обмежень на політику по відношенню до порожніх значень в рядках.

Висновок

Oracle Database 10 g пропонує кілька розширень опцій FGA і VPD. Опція FGA перехоплює дії користувачів на дуже деталізованому рівні, що допомагає вам уникати ручного аудиту на базі тригерів і комбінує журнали стандартного аудиту та FGA. VPD – це дуже потужна опція, здатна підтримувати різноманітність вимог, типу вибіркового маскування стовпців, заснованих на політиці і застосовувати політику тільки, коли відбувається звернення до певних стовпцях.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*