Вот очень простой пример, иллюстрирующий, как работает Oracle Label Security. Мы создали и заполнили таблицу с четырьмя записями, которая называется documents, и определили для нее два уровня защиты: PUBLIC и INTERNAL. Каждому уровню также присваивается числовое значение: 1000 или 2000. Затем мы назначим уровень каждой строке в таблице. Ниже показан простой оператор SELECT для таблицы:
SQL> SELECT * FROM documents;
DOCID DOCNAME LEVEL DOC_LABEL
----- ----------- -------- ---------
1 SHARE_WARE PUBLIC 1000
2 WEST_PAYROLL INTERNAL 2000
3 EAST_SALES INTERNAL 2000
4 COMP_PAYROLL INTERNAL 2000
Теперь допустим, что имеется два пользователя нашей базы данных: EMP и MGR. Уровни доступа этим пользователям мы назначаем следующим образом:
Пользователю EMP назначается уровень PUBLIC (только для чтения).
Пользователю MGR назначаются уровни INTERNAL и PUBLIC (чтение-запись).
Когда эти пользователи обращаются к таблице, EMP может читать только строку 1, тогда как MGR имеет полный доступ для чтения-записи ко всем четырем строкам.
Что происходит внутри базы данных, когда этот пользователь обращается к таблице documents? Предположим, что этот запрос выполняет пользователь EMP:
SELECT * FROM documents;
База данных Oracle производит синтаксический анализ запроса и определяет, что таблица находится под защитой с помощью меток. Oracle Label Security добавляет к запросу фразу WHERE, чтобы гарантировать, что пользователь EMP видит только строки, отмеченные меткой доступа PUBLIC:
SELECT * FROM documents
WHERE doc_label = 1000;
Ниже приводится то, что пользователь EMP увидит после выполнения запроса:
DOCID DOCNAME LEVEL DOC_LABEL
----- ---------- ------ ---------
1 SHARE_WARE PUBLIC 1000
Вы могли бы задать вопрос: "Почему бы не создать представление, которое ограничивало бы доступ, базируясь на некотором значении столбца?" И в самом деле, если вашему приложению требуется всего лишь несколько уровней, и нет никаких специальных требований по защите, которые нужно учесть, то методы добавления к вашей таблице столбца защиты и использования приложений будут адекватными.
Но предположим, что ваши системные требования изменились, и теперь вы должны в нескольких организациях управлять несколькими иерархиями пользователей, с настраиваемыми разрешениями на чтение/запись для изменяющихся наборов данных. Кроме того, контролируемые организации находятся в различных странах, в каждой из которых действует собственное законодательство и ограничения в области защищенности. Такие требования намного труднее реализовать, если вы используете только представления.
К счастью, Oracle Label Security разработана специально для масштабирования; поэтому реализация этого типа защиты приложений более проста, чем вы могли бы ожидать.
В базе данных Oracle опция Oracle Label Security обеспечивает защищенный способ управления детализированным доступом к вашим данным. Инкапсулированная в машине базы данных, эта характеристика не может быть скомпрометирована, и предлагает защищенный метод реализации и сопровождения комплексных потребностей в защите на уровне строк.