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