Oracle: регулирование доступа к отдельным строкам таблиц
ОГЛАВЛЕНИЕ
Label Security – дополнительная возможность Oracle. Для того, чтобы ею пользоваться, нужно (а) завести при установке ПО СУБД Oracle нужные компоненты и (б) завести необходимые структуры в БД. Первое делается установщиком OUI, а второе – конфигуратором БД DCA или простым прогоном сценария catols.sql из каталога $ORACLE_HOME/rdbms/admin. Наблюдаемый результат – новый пользователь LBACSYS и целая серия принадлежащих ему объектов, включая пакеты, имена которых начинаются с 'SA_'.
Простой пример
Данные для регламентируемого доступа
Пусть у сотрудников из таблицы EMP имеются телефоны:
CONNECT scott/tiger
CREATE TABLE phone AS SELECT empno FROM emp;
ALTER TABLE phone ADD (pno VARCHAR(20));
ALTER TABLE phone ADD PRIMARY KEY (empno, pno);
UPDATE phone
SET pno = TRUNC(dbms_random.value(100, 999))
||'-'
||TRUNC(dbms_random.value(1000, 9999));
Какие-то из них будут общедоступны, а какие-то нет, но об этом будет сообщено позже.
Заведем пользователей Oracle, представляющих сотрудника и административное лицо. Дадим им минимум необходимых для данного примера полномочий:
CONNECT / AS SYSDBA
CREATE USER employee IDENTIFIED BY employee;
CREATE USER head IDENTIFIED BY head;
CREATE ROLE minimal;
GRANT CREATE SESSION TO minimal;
GRANT SELECT ON scott.phone TO minimal;
GRANT SELECT ON scott.emp TO minimal;
GRANT minimal TO employee, head;
GRANT UPDATE ON scott.phone TO lbacsys;
GRANT UPDATE ON scott.emp TO lbacsys;