DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Проверка перезаписи запроса

При отладке может возникнуть необходимость проверить модифицированный политикой RLS оператор SQL. Мы ведь не хотим действовать наугад или полагаться на удачу. Увидеть измененный оператор можно при помощи представления словаря данных или задав событие.
Представление словаря данных
Можно использовать представление словаря данных V$VPD_POLICY. «VPD» в названии представления означает Virtual Private Database - виртуальная частная база данных (название, которое иногда используют для технологии безопасности на уровне строк). Это представление отображает все изменения запроса, выполненные политикой RLS.

Столбец SQL_TEXT содержит точный текст SQL-оператора, выданного пользователем, а столбец PREDICATE - предикат, сформированный функцией политики и примененный к запросу. Используя данное представление, вы можете увидеть пользовательские операторы и примененные к ним предикаты.
Трассировка событий
Можно также задать событие внутри сеанса и проанализировать файл трассировки. Прежде чем выполнить запрос, пользователь Martin выполняет дополнительную команду создания события.

После завершения запроса файл трассировки появится в каталоге, указанном параметром инициализации базы данных USER_DUMP_DEST. Он будет содержать следующие данные:


Используя любой из предложенных способов, вы сможете увидеть, каким образом были перезаписаны запросы пользователя.
Взаимодействие RLS с другими функциями Oracle
Как и любая другая мощная технология, RLS обладает своим набором возможных проблем и сложностей. В этом разделе будет описано взаимодействие между RLS и несколькими другими функциями Oracle.
Ссылочное ограничение целостности
Если для таблицы, на которую наложена политика RLS, действует ссылочное ограничение целостности, указывающее на родительскую таблицу, на которую также наложена политика RLS, то обработка ошибок Oracle может создавать проблемы для безопасности. Предположим, что для таблицы DEPT определена политика RLS, разрешающая пользователю видеть данные только о своем отделе. В этом случае запрос «всех строк» таблицы DEPT выведет всего одну строку:

Однако для таблицы EMP политика RLS не определена, поэтому пользователь может свободно выбирать из нее данные. Так что он вполне может получить информацию о том, что отделов существует несколько.

Таблица EMP имеет ссылочное ограничение целостности для столбца DEPTNO, которое ссылается на столбец DEPTNO таблицы DEPT.
Пользователь может видеть подробные данные только для отдела 10, к которому он принадлежит, при этом он знает о существовании других отделов. Предположим теперь, что он попытается изменить таблицу EMP, установив номер отдела в 50.


Ошибка указывает на нарушение ограничения целостности. И оно действительно имеет место, так как в таблице DEPT нет строки со значением DEPTNO, равным 50. Средства Oracle выполнили свою работу, но в результате пользователь получил больше знаний о таблице DEPT, чем это подразумевалось политикой безопасности.
При некоторых обстоятельствах выявление отсутствия данных может быть столь же серьезным нарушением безопасности, как и отображение данных, присутствующих в таблице.
 









jAntivirus