我正在寻找调试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'' ) )';
答案 0 :(得分:0)
如果你想弄清楚为什么有些行不应该出现,和/或为什么某些行没有显示出来,请试试这个:
然后,您可以轻松地逐个更改谓词(例如,注释掉各个位),直到找出它们为什么会产生意外结果。