Доброго времени суток.
Столкнулся с интересной ситуацией. Задача ограничить доступ к таблицам, и контролировать доступ через вью и триггеры.
Использую MS SQL Express 2014 SP1.
Имеются две схемы и две таблицы в них. Имеется в вьюха, объединяющая данные этих таблиц по ключу, но имеющая фильтр, ограничивающий данные.
На вью создан триггер INSTEAD OF INSERT,DELETE,UPDATE
Данный триггер вставляет, изменяет, удаляет данные из таблиц используя ключ. Так же пишет историю модификации.
Имеется роль, включающая в себя вставку, изменение, удаление из этих таблиц. А так же чтение из вью.
Данная роль предоставлена пользователю.
Данные нормально предоставляются через вью. Из таблиц данные не прочитать. (хотя можно удалить и изменить, хоть целиком:-))
Теперь при попытке обновления какой то записи в БД через вью, в триггере, при выполнении обновления, используя Where ID=XXX БД требует наличие права на чтения из поля ID целевой таблицы.
Вопрос, возможно ли как то это обойти? Или возможно вообще изменить схему?
Столкнулся с интересной ситуацией. Задача ограничить доступ к таблицам, и контролировать доступ через вью и триггеры.
Использую MS SQL Express 2014 SP1.
Имеются две схемы и две таблицы в них. Имеется в вьюха, объединяющая данные этих таблиц по ключу, но имеющая фильтр, ограничивающий данные.
На вью создан триггер INSTEAD OF INSERT,DELETE,UPDATE
Данный триггер вставляет, изменяет, удаляет данные из таблиц используя ключ. Так же пишет историю модификации.
Имеется роль, включающая в себя вставку, изменение, удаление из этих таблиц. А так же чтение из вью.
Данная роль предоставлена пользователю.
Данные нормально предоставляются через вью. Из таблиц данные не прочитать. (хотя можно удалить и изменить, хоть целиком:-))
Теперь при попытке обновления какой то записи в БД через вью, в триггере, при выполнении обновления, используя Where ID=XXX БД требует наличие права на чтения из поля ID целевой таблицы.
Вопрос, возможно ли как то это обойти? Или возможно вообще изменить схему?