Нужны советы по отладке функций безопасности на уровне строк Oracle - PullRequest
0 голосов
/ 06 октября 2010

Мне нужны советы по отладке некоторых моих предикатов безопасности на уровне строк в базе данных 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'' ) )';

1 Ответ

0 голосов
/ 07 октября 2010

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

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

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

...