Row-Level Security в РСУБД
| Категория реферата: Рефераты по информатике, программированию
| Теги реферата: в контакте сообщения, контрольная по алгебре
| Добавил(а) на сайт: Korablin.
Предыдущая страница реферата | 1 2 3 4 5 6 7 8 9 10 | Следующая страница реферата
(IsUserInRole('Sales Representative') AND EmployeeID = CurrentEmployeeID()) OR (IsUserInRole('Vice President, Sales') AND TRUE) OR (IsUserInRole('Everyone') AND ShippedDate < DateAdd(month, -6, GetDate()) |
Стоит обратить внимание на две особенности предиката:
Во-первых, (опять же из соображений общности) в дополнительном условии проверяется принадлежность текущего пользователя к группе Everyone. Эта специальная группа по определению включает всех сотрудников, и выражение IsUserInRole('Everyone') является тождественно истинным. Это позволяет исключить его из предиката в целях оптимизации.
Во-вторых, условие сравнения даты отгрузки заказа с текущей датой сформулировано так, чтобы к полю не применялось никакой функции. Альтернативные представления того же выражения:
DateAdd(month, 6, ShippedDate) < GetDate() |
и
DateDiff(month, ShippedDate, GetDate()) >= 6 |
хотя и являются математически эквивалентными, скорее всего, помешают оптимизатору СУБД использовать индекс по полю ShippedDate (если он есть).
Атрибуты связанных таблиц
В корпоративную политику безопасности могут входить и более сложные правила, которые связывают различные сущности предметной области между собой. Например, предположим, что компания Northwind выросла, и в ней есть несколько филиалов. Структура таблицы сотрудников претерпевает соответствующие изменения:
ALTER TABLE [Employee] ADD [DivisionID] int CONSTRAINT [DivisionID_FK] REFERENCES [Division]([DivisionID]) |
Новый вариант правила №1 из предыдущего раздела формулируется так:
Менеджеры по продажам (роль ‘Sales Representative’) имеют право просматривать только заказы, введенные менеджерами из того же филиала.
Соответствующая часть предиката безопасности теперь примет такой вид:
(IsUserInRole('Sales Representative') AND (select DivisionID from Employees where EmployeeID = CurrentEmployeeID()) = (select DivisionID from Employees where EmployeeID = EmployeeID) |
Еще один пример правил безопасности, требующий обращения к другим таблицам, связан с защитой подчиненных таблиц. Вместе с записями в таблице заказов необходимо защитить и записи в таблице деталей заказов. Применим правила из предыдущего примера (где еще не было филиалов) к таблице Order Details:
Рекомендуем скачать другие рефераты по теме: оценка реферата, диплом анализ.
Категории:
Предыдущая страница реферата | 1 2 3 4 5 6 7 8 9 10 | Следующая страница реферата