我有興趣編寫一個觸發器,該觸發器可以忽略來自特定SQL用戶的查詢,但對所有其他用戶採取行動。有沒有辦法做到這一點?有沒有辦法找出提交了SQL查詢的用戶?
但是注意:用戶需要做一些查詢,所以我需要允許一些查詢/刪除/等等。
我有興趣編寫一個觸發器,該觸發器可以忽略來自特定SQL用戶的查詢,但對所有其他用戶採取行動。有沒有辦法做到這一點?有沒有辦法找出提交了SQL查詢的用戶?
但是注意:用戶需要做一些查詢,所以我需要允許一些查詢/刪除/等等。
如果你有一個觸發器,現在你不想(在移動大量數據時我們已經在審計觸發器上完成了這項工作),您可以在觸發器開始時執行下列操作:
if (suser_sname() = 'somename') return
如果你想做一些不同的充只是那個人,你會做這樣的事情:
if (suser_sname() = 'somename)
BEGIN
some code
END
ELSE
BEGIN
someother code
END
注意一下這幾款的事情。使用此代碼太小心。首先,如果您可以通過安全權限來執行您的任務,那麼這是一個更好的選擇。將某人的名字硬編碼爲觸發器可能會在以後某些時候會忘記您將其放在那裏時導致奇怪的結果。如果您需要在短期內做到這一點(例如,一次將成批的100,000,000條記錄移入數據庫,而不觸及auidit觸發器),那麼不要忘記在項目完成時將其更改回來。如果您正在審計金融交易,您不希望永遠不會審計某人的行爲。此外,在觸發器中執行某些操作僅適用於插入/更新/刪除操作。您無法阻止觸發器中的選擇。
無需硬編碼,您可以將用戶存儲在表中並使用IF EXISTS(SELECT username FROM BadBadBadUsers WHERE suser_sname()= BadUserName)'。我喜歡用'suser_name()'來思考! – 2010-03-25 21:12:19
只是調整他們的權限,不包括選擇和任何你想阻止他們做的事情。
如何內置的用戶功能是這樣的:使用
If USER <> [your case]
Begin
Do Stuff
End
這可能會更好地處理安全級別,即不要讓_that_用戶插入,刪除,選擇等(它只是覺得像一個觸發器會過度殺傷;其他用戶的處理時間根本不會受到影響如果該用戶不允許與該表進行交互)。 – 2010-03-25 19:41:43
觸發器不能阻止SELECT,只有安全可以 – 2010-03-25 19:53:46