我懷疑你的問題是你的UPDATE語句本身需要SELECT權限。
我創建一個測試數據庫如下:
DROP DATABASE triggerPermissionTest
CREATE DATABASE triggerPermissionTest
GO
USE triggerPermissionTest
GO
CREATE USER foo FROM LOGIN tester
GO
CREATE TABLE triggerTable (id int)
GO
DENY SELECT ON triggerTable to foo
GRANT UPDATE ON triggerTable to foo
GO
CREATE TRIGGER execAsTrigger ON triggerTable
AFTER UPDATE AS SELECT * FROM triggerTable
GO
INSERT INTO triggerTable VALUES (1)
GO
和嘗試了以下更新語句與「測試器」登錄:
UPDATE triggerTable SET id = 2
GO
UPDATE triggerTable SET id = id *2
GO
第一個執行精細和觸發器執行(將triggerTable中的select *的結果提供給用戶而沒有選擇權限,表明它設法做出選擇)。
第二個給我一個錯誤,指出我沒有對triggerTable的選擇權限(因爲它需要從triggerTable中選擇以獲取id的值來執行更新)。
這使我得出結論,觸發器是偶然的問題,並且UPDATE語句是權限問題的原因。
嗯...不行。只是爲了好玩,我嘗試評論觸發器體,所以它不應該選擇任何東西,但我仍然得到錯誤。 我真的不知道爲什麼,因爲我所做的全部是 UPDATE site.CONTENT SET NAME ='Contact Us',CONTENT ='你好!您可以通過212.555.1212與我們聯繫。
邪惡的乾杯!
'WHERE ROWID = 2 而且表格上只有一個觸發器。所以我不知道它在做什麼SELECT。即使SQL事件探查器也不顯示事務中發生的任何SELECT語句。 GRRR ...好吧,無論如何,我想我必須回到這個。 – eidylon 2009-05-06 17:57:08
(oops,在發表評論時沒有意識到它沒有使用格式化規則) – eidylon 2009-05-06 17:57:47