Bloody_Nokia_Adept
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору deaddragon Цитата: С какими правами заускается триггер в SQL Server. | Вот что написано в BOL: Цитата: CREATE TRIGGER Creates a trigger, which is a special kind of stored procedure that executes automatically when a user attempts the specified data-modification statement on the specified table. | Цитата: Permissions CREATE TRIGGER permissions default to the table owner on which the trigger is defined, the sysadmin fixed server role, and members of the db_owner and db_ddladmin fixed database roles, and are not transferable. To retrieve data from a table or view, a user must have SELECT statement permission on the table or view. To update the content of a table or view, a user must have INSERT, DELETE, and UPDATE statement permissions on the table or view. If an INSTEAD OF trigger exists on a view, the user must have INSERT, DELETE, and UPDATE privileges on that view to issue INSERT, DELETE, and UPDATE statements against the view, regardless of whether the execution actually performs such an operation on the view. | Итак, видим что триггер - особый вид хранимой процедуры, а они как известно выполняются с правами создателя (это в Oracle можно указать на запуск с правами исполнителя). Это легко проверить. Этот код выполняется от имени sa: Цитата: use northwind go create table test_table (i int) go create procedure test_proc as print '<<< test_proc >>>' go create trigger test_trig on test_table for insert as exec test_proc go exec sp_addlogin 'test_user', '', 'northwind' go exec sp_adduser 'test_user' go grant select, insert on test_table to test_user go | Цитата: New login created. Granted database access to 'test_user'. | Этот код выполняется от имени test_user: Цитата: exec test_proc; select * from test_table; insert into test_table values(1); | Цитата: Server: Msg 229, Level 14, State 5, Procedure test_proc, Line 1 EXECUTE permission denied on object 'test_proc', database 'Northwind', owner 'dbo'. i ----------- (0 row(s) affected) <<< test_proc >>> (1 row(s) affected) | Вроде бы все наглядно показал |