0

我正在寻找在 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'' ) )';
4

1 回答 1

0

如果您想弄清楚为什么有些行不应该出现,和/或为什么有些行不应该出现,试试这个:

  1. 删除所有行级安全谓词。
  2. 运行查询,但手动添加行级安全谓词。
  3. 检查结果。

然后,您可以轻松地逐一更改谓词(例如,注释掉各个位),直到弄清楚它们给出意外结果的原因。

于 2010-10-07T00:19:04.363 回答