2010-06-28 278 views
0

有沒有辦法從觸發器中訪問觸發觸發器的sql?我已經設法通過加入master..monProcessSQLText MDA表來獲得它,但這隻適用於mon_role的用戶,我不想將它提供給每個人。有沒有我錯過的全球變量?從觸發器(Sybase)中觸發觸發器的sql

我想記錄所有更新運行在一張桌子上,所以我可以追溯到一個IP地址和用戶名。

這是ASE 12.5。

+0

請查看答案並提出問題。 – PerformanceDBA 2010-11-28 01:48:50

回答

1

如果你想

日誌中的所有更新運行對錶,所以我可以追根溯源到一個IP地址和用戶名

觸發肯定是走錯了路去處理它,觸發器是而不是專爲此設計的,並且還有其他ASE設施,其中爲此設計的。這不是關於桌面,而是關於安全和監視。

  1. Sybase審計。
    它需要一些設置,比MAD表的開銷小得多;但最重要的是,它是爲審計而設計的(MDA不是)。並沒有編碼要求,如MDA。它是高度可配置的,這個想法是隻捕獲你所需要的,而不是更多。

  2. 監測。
    我不會推薦MDA表格,但是因爲您已經安裝了這些表格,並且已經啓用了監視功能,並且接受了22%的捕獲SQL文本的開銷......這些信息非常短暫。爲了將它們用於任何相關目的(如您的),您需要編寫一個捕獲和存儲機制,將所有必需的信息歸檔到歸檔數據庫。這必須在持續的基礎上完成,並且完全獨立於觸發器等。您還可以實時過濾以減少存儲的數據量(警告,數量巨大)。清除7天以上的數據等。這本身就是一個小項目,這就是爲什麼從第三方可以買到的原因。

一旦其中任一設備到位,那麼,分開,每當你想打聽誰更新的表,時間和地點,所有你需要做的是檢查檔案。與觸發器無關,或從觸發器獲取信息或向普通用戶授予管理員權限時遇到困難。

另外,需要了解的是,您沒有正常的安全性,表格正在被用戶直接更新;因此直接更新權限已授予特定用戶,或者更糟糕的是已授予所有用戶。結果是,沒有辦法知道誰在更新表,以及誰在破壞數據或參照完整性。

  • 安全的方法是將整個事務放在存儲過程中,從而消除了不完整事務(以及提高執行速度)的可能性;並授予特權的權限,而不是表,從而消除直接更新。隨着時間的推移,您可能希望在服務器中實現安全性,以避免後果逐一被追查並逐一關閉,這是一個沒有限制的過程。

就審計而言,如果安全到位,那麼審計負擔也大大降低:您只需審計存儲的proc執行情況。否則,您需要審計所有表的所有更新。