1
這是一個後續約Oracle的行級安全功能的舊問題最初討論here甲骨文RLS/VPD與政策功能迴路
我需要修改,因爲原來的代碼,如果將返回多個結果用戶被連接到多個項目。所以現在我需要有多個條件(例如project = project_1或project = project_2)傳遞給安全策略才能工作。要做到這一點,我嘗試用一個for循環修改代碼,它是不工作...
--create function
create or replace function
table_access_policy
(obj_schema varchar2, obj_name varchar2) return varchar2
is
v_project_temp varchar2(9000);
begin
v_project_temp:= 'declare v_project varchar2(9000);
begin
v_project:= ''project = '';
for c in (select admin.access_list.project from admin.access_list where upper(admin.access_list.user_id) = SYS_CONTEXT (''USERENV'', ''SESSION_USER''))
loop
v_project := v_project || c.project_sn || '' or project = '' ;
end loop;
v_project := rtrim(v_project, '' or project = '');
end;';
return v_project_temp;
end;
的函數保存/運行沒有任何錯誤,但是當它被稱爲政策本身拋出一個錯誤。有一個更好的方法嗎?
感謝您的回覆。我不知道我可以通過安全策略。我認爲我們必須通過查詢,並且策略必須實時執行查詢。 不幸的是我仍然得到「政策謂詞有錯誤」。 我試着手動運行你的代碼而沒有「Create function ...」,並且它返回了預期的結果。有任何想法嗎? – AFJ
我在'USERENV'和'SESSION_USER'周圍留下了額外的引號。我編輯了答案以刪除它們。看看是否有效。 –
我在您的回覆中發現了額外的引號,並且提前刪除了它們。仍然沒有運氣 – AFJ