Ищу советы по отладке функций безопасности Oracle на уровне строк

Мне нужны советы по отладке некоторых моих предикатов безопасности на уровне строк в базе данных Oracle. Эти предикаты используют несколько концепций, чтобы определить, может ли текущий пользователь видеть запись:

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

У меня возникают проблемы с отладкой такого рода вещей на реальных данных, потому что я не могу найти хороший способ имитировать фактическое видение того, что может видеть конкретный пользователь. Итак, жду советов. Есть ли хорошая базовая структура для такого рода вещей?

Вот пример одного из моих предикатов:

predicate := 'project_id in (' ||
    '(select upr.projectid project_id ' ||
    'from  chemreg.usergroups_projects_vu upr, ' ||
    '      chemreg.usergroups_personnel_vu upe, ' ||
    '      chemreg.personnel pe ' ||
    'where upr.usergroupid = upe.usergroup_id ' ||
    '      and upe.personnel_id = pe.person_id ' ||
    '      and upper(pe.username) = USER) ' ||
    'union ' ||
    '(select project_id from chemreg.project ' ||
    'where active = ''Y'' and private = ''N'' ) )';

person Chris Farmer    schedule 06.10.2010    source источник


Ответы (1)


Если вы пытаетесь выяснить, почему некоторые строки появляются, когда не должны, и/или почему некоторые строки не появляются, когда должны, попробуйте следующее:

  1. Удалите все предикаты безопасности на уровне строк.
  2. Запускайте запросы, но вручную добавляйте предикаты безопасности на уровне строк.
  3. Проверьте результаты.

Затем вы можете легко изменить предикаты один за другим (например, закомментировать отдельные биты), пока не поймете, почему они дают неожиданные результаты.

person Jeffrey Kemp    schedule 07.10.2010
comment
Я предполагаю, что сложность заключается в текущем пользовательском контексте. Итак, если мой предикат присоединяется к какому-то представлению, например user_role_privs, то я все равно не получаю всей картины, если только я не войду в систему как этот человек. Я предполагаю, что у меня больше проблем с моделированием реальной среды пользователя. Я знаю, что могу создать тестовых пользователей с правильными ролями и т. д., но отношения между пользователями, их данными и их ролями — весь этот пакет — усложняют мне задачу. Что я делал, так это находил пользователя, который позволил бы мне изменить свой пароль и войти под ним на пару часов. - person Chris Farmer; 07.10.2010
comment
Вы спрашиваете у пользователя пароль? Вы не отлаживаете в производстве, не так ли? - person Jeffrey Kemp; 08.10.2010