DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Контроль доступа на уровне строк

Технология RLS (row-level security, безопасность на уровне строк) позволяет задавать правила (политики) безопасности для таблиц базы данных (и отдельных типов операций над таблицами), ограничивающие для пользователя возможность чтения или изменения определенных строк в этих таблицах. Появившись в Oracle8i, эта технология стала очень полезным инструментом для администратора баз данных, поэтому в Orac- le9i и Oracle 10^ ее возможности были расширены. Функциональность RLS реализована в основном с помощью встроенного пакета DBMS_RLS.
В этой главе мы обсудим, как использовать пакет DBMS_RLS для создания и применения политик RLS в базе данных, и сравним возможности этой технологии в версиях Oracle9i и Oracle 10g\ Рассмотрим также работу контекста приложения в связке с RLS и взаимодействие RLS с рядом других возможностей Oracle. Поскольку, вероятно, многие администраторы все еще используют Oracle9i, сначала рассмотрим средства RLS в этой версии, тем более что большая их часть перешла в Oracle 10g. Расширение возможностей RLS в Oracle 10^ описано в разделе «RLS в Oracle 10g». Прежде чем углубляться в подробности работы RLS, мы рекомендуем вернуться на шаг назад и освежить свои представления о том, как осуществляются авторизация и доступ к базе данных.
Введение в RLS
Уже много лет Oracle обеспечивает безопасность на уровне таблиц и в некоторой степени на уровне столбцов. Пользователям могут быть выданы (или отозваны у них) привилегии на доступ к отдельным таблицам или столбцам. Определенным пользователям можно выдать права на вставку в один набор таблиц и на выборку данных из другого набора таблиц. Например, пользователь John может получить привилегию на операцию SELECT для таблицы EMP, принадлежащей пользова телю Scott, которая позволяет John^ получить любую строку этой таблицы, но не позволяет выполнить изменение, удаление или вставку. Привилегии на уровне объектов отвечают многим требованиям, но иногда они оказываются недостаточно детальными для выполнения разнообразных правил безопасности, которые часто налагаются на работу с корпоративными данными. Типичным примером являются демонстрационные таблицы Oracle, традиционно содержащие данные о сотрудниках. В таблице EMP хранятся данные обо всех сотрудниках компании, но руководителям отделов должна быть доступна информация только о работниках своего подразделения.
Ранее администраторы баз данных полагались на создаваемые поверх базовых таблиц представления, обеспечивающие безопасность на уровне строк. К сожалению, применение этого метода может привести к появлению огромного количества представлений, которые сложно оптимизировать и контролировать, особенно учитывая тот факт, что правила доступа к строкам могут со временем меняться.
Тут в дело вступает технология RLS. С ее помощью вы можете очень точно определить доступный пользователю набор строк таблицы, при этом контроль будет осуществляться PL/SQL-функциями, реализующими сложную логику правил. Управлять такими функциями гораздо проще, чем представлениями.
Технология RLS включает в себя три основных элемента. Политика (policy)
Декларативная команда, которая определяет, как и когда следует применять ограничения пользовательского доступа для запросов, вставок, удалений, изменений или комбинаций перечисленных операций. Например, может потребоваться запретить для пользователя операции UPDATE, не ограничивая возможности выборки, или ограничить доступ к выбору данных из определенного столбца (например, сведения о зарплате, SALARY), не ограничивая выборку из остальных столбцов.
Функция политики безопасности (policy function)
Хранимая функция, которая вызывается в случае, когда выполняются условия, заданные в политике безопасности.
Предикат (predicate)
Строка, которая генерируется функцией политики безопасности, и которую Oracle прозрачно автоматически присоединяет в конец предложения WHERE выполняемых пользователем операторов SQL.
RLS автоматически применяет предикат к пользовательскому оператору SQL, вне зависимости от того, как этот оператор был выполнен. Предикат фильтрует строки на основании условия, определенного функцией политики безопасности. Если условие исключает все строки, которые не должны быть видны пользователю, то тем самым фактически обеспечивается безопасность на уровне строк. Ключевым моментом,
обеспечивающим высокую надежность и полноту технологии RLS, является то, что Oracle автоматически применяет предикат к пользовательскому SQL-оператору.
Зачем вам знать об RLS?
Исходя из сказанного, у вас могло сложиться впечатление, что RLS - это узкоспециализированная функция безопасности, которая вряд ли понадобится в каждодневной работе администратора базы данных. На самом деле, польза от применения RLS выходит за рамки обеспечения безопасности. Приведем краткий обзор причин, по которым администраторы баз данных находят применение RLS полезным (подробно эти причины будут рассмотрены далее в главе).
 









jAntivirus