Предположим, что правила корпоративной безопасности по
отношению к данным заказов определены следующим образом:
Менеджеры по продажам (роль ‘Sales Representative’)
имеют право просматривать только «свои» заказы и не могут видеть заказы, введенные
другими менеджерами по продажам.
Директор по продажам (роль ‘Vice President, Sales’)
имеет право просматривать любые заказы.
Все остальные сотрудники доступа к заказам не имеют.
Этим правилам соответствует вот такое представление:
CREATE VIEW [Secure Orders] AS
SELECT * FROM Orders where
(IsUserInRole('Sales
Representative') AND EmployeeID = CurrentEmployeeID())
OR
(IsUserInRole('Vice President, Sales') AND TRUE)
|
Здесь подразумевается, что функция CurrentEmployeeID()
неким «магическим» образом возвращает идентификатор сотрудника, соответствующий
пользователю, от имени которого произведено подключение. Реализация этой
функции, как и функции IsUserInRole(), зависит от используемой СУБД. Обратите
внимание на вторую часть предиката: для директора по продажам никаких
дополнительных ограничений не предусмотрено, но для общности мы использовали
выражение TRUE для представления этого факта. При подготовке предиката вручную
фрагмент AND TRUE можно опустить, хотя оптимизаторы, используемые в современных
СУБД, достаточно интеллектуальны, чтобы выбросить избыточные выражения из плана
запроса.
СОВЕТ
Иногда предикат безопасности может
оказаться настолько сложным, что оптимизатор СУБД не сможет самостоятельно
построить оптимальный план выполнения запроса. В таких случаях может
потребоваться ручное преобразование выражения предиката в более адекватную
форму. Пока что мы будем считать, что оптимизатор идеален, и все выражения
будут представлены в наиболее удобном для чтения виде.
|
Если в будущем руководство компании решит, что доступ
к заказам, отгруженным более шести календарных месяцев назад, можно
предоставить всем сотрудникам компании, то предикат безопасности примет такой
вид:
Рекомендуем скачать другие рефераты по теме: оценка реферата, диплом анализ.
Предыдущая страница реферата |
1
2
3
4
5
6
7
8
9
10 |
Следующая страница реферата