2013-04-12 42 views
1

我已經成功地在Oracle中創建了一個審計表,它在審計記錄更新,刪除或插入employees表時進行審計。我也做到了,因此只有在辦公時間(上午9點至下午5點)內進行更改時纔會審覈記錄。基於工作角色的Oracle審計表

如果你想看到這個代碼請讓我知道,但我只是想知道是否有可能只審計基於工作角色的記錄。在員工表中有一個像這樣的工作角色列。

Job_role 
Director 
Security Guard II 
Administration Manager 
Warehouse Assistant I 

我只希望它能夠審計由例如保安人員或倉庫助理,因爲這些工作角色實在不應該與僱員數據庫交互的改變。

任何幫助表示讚賞。

謝謝

+0

我對第一個問題的評論http://stackoverflow.com/q/15534951/146325僅在特定時間內進行審計的審計非常不值錢。只監視員工的專業類型的審計會增加無用性。這也是錯誤的方法。如果「倉庫助理」不應該與數據庫表進行交互,爲什麼他們的用戶帳戶獲得了允許他們這樣做的權限?你需要重新考慮你的整個安全模型。 – APC

+0

嗨,感謝您的迴應,再次我同意你,但我目前在大學,這是'我的客戶'想要的項目我承諾,所以我別無選擇,只能按照他們所要求的。 –

+0

是的,我聽到很多。問題不僅在於你被要求建立一些毫無意義的東西,而且你沒有學到任何有關適當軟件項目的意義。在現實生活中,我只會告訴客戶停止這麼愚蠢,並開始創建一些有用的東西。 – APC

回答

1

你需要做的是用戶的職位描述保存在session變量。

爲此,您使用CREATE CONTEXT命令聲明名稱空間。 Docs here.

然後您有an AFTER-LOGON database trigger,它查詢USERS表並使用DBMS_SESSION.set_context()將名稱空間中的作業說明存儲在名稱空間中。 Docs here.

最後,當談到閱讀與SYS_CONTEXT()存儲的值,並作出適當決定審計命令:

if sys_context('AUDIT_INFO', 'JOB_DESCR') = 'Warehouse Assistant I' 
then 
    call_your_audit_proc(.....); 
end if;