0

Oracle データベースで行レベルのセキュリティ述語をデバッグする際のヒントを探しています。これらの述語は、いくつかの概念を使用して、現在のユーザーがレコードを表示できるかどうかを判断します。

  • 現在のユーザーの Oracle ユーザー名
  • 現在のユーザーに割り当てられた Oracle ロール
  • 1 つ以上のテーブル内のレコードに対する現在のユーザーの所属

特定のユーザーが見ることができるものを実際に見ることをシミュレートする良い方法がわからないため、実際のデータでこの種のものをデバッグするのに問題があります。ということで、ヒント募集中です。この種のもののための良い基本的なフレームワークはありますか?

以下は、私の述語の 1 つの例です。

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. 結果を確認します。

次に、述語が予期しない結果をもたらしている理由がわかるまで、述語を 1 つずつ簡単に変更できます (たとえば、個々のビットをコメントアウトします)。

于 2010-10-07T00:19:04.363 に答える