Я подозреваю, что ваша проблема в том, что самому оператору UPDATE требуется разрешение SELECT.
Я создал тестовую базу данных следующим образом:
DROP DATABASE triggerPermissionTest<br>
CREATE DATABASE triggerPermissionTest<br>
GO<br>
USE triggerPermissionTest<br>
GO<br>
CREATE USER foo FROM LOGIN tester<br>
GO<br>
CREATE TABLE triggerTable (id int)<br>
GO<br>
DENY SELECT ON triggerTable to foo<br>
GRANT UPDATE ON triggerTable to foo<br>
GO<br>
CREATE TRIGGER execAsTrigger ON triggerTable<br>
AFTER UPDATE AS SELECT * FROM triggerTable <br>
GO<br>
INSERT INTO triggerTable VALUES (1)<br>
GO<br>
и попробовал следующие операторы обновления с логином 'tester':
UPDATE triggerTable SET id = 2<br>
GO<br>
UPDATE triggerTable SET id = id *2<br>
GO<br>
Первый выполняется нормально, и запускается триггер (предоставляя результаты выбора * из triggerTable пользователю без прав выбора, демонстрируя, что ему удалось сделать выбор).
Второй дает мне сообщение об ошибке, утверждающее, что у меня нет разрешения на выбор для triggerTable (потому что он должен выбирать из triggerTable, чтобы получить значение id для обновления).
Это приводит меня к выводу, что триггер является непредвиденным для проблемы, а оператор UPDATE является причиной проблемы с разрешениями.