寻找有关调试Oracle行级安全功能的提示

时间:2010-10-06 16:36:03

标签: oracle debugging row-level-security

我正在寻找调试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 :(得分:0)

如果你想弄清楚为什么有些行不应该出现,和/或为什么某些行没有显示出来,请试试这个:

  1. 删除所有行级安全谓词。
  2. 运行查询,但手动添加行级安全谓词。
  3. 检查结果。
  4. 然后,您可以轻松地逐个更改谓词(例如,注释掉各个位),直到找出它们为什么会产生意外结果。