2010-01-28 67 views
0

在我的Sybase服務器中,表的某些行(TBL_RESOURCE)正在隨機間隔從未知源中刪除。我嘗試了很多,但我無法找到從哪個源/文件/進程中刪除這些數據。有沒有找到這個問題的機制?我需要找出誰在刪除這些行..Sybase觸發器查找已刪除的查詢

我們如何才能找出誰被刪除,並從哪個文件中刪除?

我們可以使用觸發器來找到刪除的來源嗎?

回答

0

是的,你可以使用觸發器。請參閱sybase doc以瞭解如何創建刪除觸發器。在觸發代碼中,您可以選擇將當前用戶,用戶ID等信息(插入)記錄到審計表中。

1

像這樣的東西會做的伎倆。

create trigger deltrig 
on TBL_RESOURCE 
for delete 
as 
    BEGIN 
     insert TBL_LOG (modifiedBy, modifiedDate)  
     select user_name(), getdate() from deleted 
     END 

(你有明顯創建記錄表TBL_LOG)

+0

這假設您沒有每個用戶都以DBA或其他帳戶登錄。 – 2010-02-02 00:26:33

2

好了,你沒有存儲的特效或交易(這將允許正常的安全性:將權限授予唯一的存儲過程,沒有直接更新到用戶的表格)。因此您有直接撥款給用戶。這意味着他們可以從任何客戶端程序(包括Excel)插入/更新/刪除。因此,很可能應用程序的源代碼中沒有代碼段,該代碼段從表中刪除。在隨機時刻刪除行就是在線數據庫的性質;防止未經授權的刪除是DBA的要求。

我認爲你已經授予了特定的人,而不是整個世界的權限,而且你不確定究竟誰在做這些討厭的事情。最簡單的方法就是簡單地詢問小組。

接下來最簡單的方法是打開該表的審覈,或允許用戶的組(或角色)。但是,如果你沒有設置審計,可能會造成障礙。

三,觸發器。

還有其他方法,但它們有大量的開銷(22%),需要大量的實現工作,並且您將不得不通過大量數據進行操作。

如果您的環境聽起來不安全且不穩定,並且表不應該從該表中刪除,那麼只需撤消該(一個)表上的權限,然後等到有人來訪問您時,他們的權限有改變。

「這假設您沒有每個用戶都以DBA或其他[特權]帳戶登錄。」

這當然是一件非常愚蠢的事情,要求,懇求災難。像向所有用戶授予對所有表的刪除一樣愚蠢。我明白你來自哪裏。