Уровни доступа

Уровни доступа (таблица 1) вводятся для проверки на уровне ядра СУБД ЛИНТЕР прав на осуществление чтения/записи информации.

Вводятся следующие уровни доступа:

  1. для пользователя (субъекта):

    • RAL-уровень доступа. Пользователь может получать (читать) информацию, RAL-уровень которой не выше его собственного уровня доступа;

    • WAL-уровень доверия на понижение уровня конфиденциальности. Пользователь не может вносить информацию с уровнем доступа (RAL-уровнем) более низким, чем данный WAL-уровень пользователя. Т.е. пользователь не может сделать доступную ему информацию менее конфиденциальной, чем указано в данном параметре.

  2. для информации:

    • RAL-уровень чтения. Пользователь может получать (читать) информацию, RAL-уровень которой не выше его собственного RAL-уровня (может читать менее конфиденциальные данные);

    • WAL-уровень ценности или уровень доступа на запись (модификацию, удаление). Пользователь может модифицировать (удалять) информацию, WAL-уровень которой не выше его RAL-уровня.

Возможные соотношения уровней представлены в таблице 1.

Таблица 1. Соотношения уровней при выполнении DML-операций

RALп

WALп

RALи

(чтение) RALи ≤ RALп

(запись) RALи ≥ WALп

WALи

(модификация, удаление) WALи ≤ RALп


RALп – RAL-уровень доступа пользователя. WALп – WAL-уровень доверия пользователя на понижение уровня конфиденциальности. RALи – RAL-уровень чтения информации. WALи – WAL-уровень ценности или уровень доступа на запись (модификацию, удаление) информации.

Контролируются 10 уровней доступа (номера 1-10). Уровни 11-15 зарезервированы. Всем создаваемым пользователям БД по умолчанию устанавливается уровень доступа 0 (признак отсутствия контроля по мандатному доступу, т.е. пользователи имеют возможность читать и модифицировать все доступные им по мандатному принципу контроля данные).

Создать пользователя с произвольными RAL/WAL-уровнями может только создатель БД. Остальные администраторы БД (пользователи категории DBA) имеют право создавать пользователей БД (или изменять им уровень доступа) только в пределах отведенных данному администратору RAL/WAL-уровней (на чтение – не выше, на запись – не ниже).

Пользователь может явно задавать уровень доступа вводимых данных, указывая в списке атрибутов уровни доступа для соответствующих записей и полей (при операции INSERT или UPDATE).

RAL-уровень и WAL-уровень вносимых данных берутся как максимум установленных RAL-уровня и WAL-уровня для канала/пользователя, вносящего/изменяющего данные.

Защищаемые объекты: пользователи, таблицы, столбцы, записи (вносятся при INSERT), поля записей (изменяются при UPDATE).

Пример

create if not exists level "NS"  = 1;
create if not exists level "DSP" = 2;
create if not exists level "S" = 3;
create if not exists level "C" = 4;
create if not exists level "CC" = 5;

drop user U1 cascade;
create user U1 identified by '12345678';
grant dba to U1;
alter user U1 level("S", "C");

! < Метка доступа > пользователя ##3#4.
username U1/12345678
! < Метка доступа > таблицы ##3#4 (наследуется от < метки доступа > создателя).
create or replace table TAB1 (id int, name char(10));
! < Метка доступа > добавляемой записи ##4#4.
! Пользователь может внести строку ##4#4, т.к. RAL-уровень информации совпадает
 с !WAL-уровнем пользователя.
! Но у пользователя нет доступа на запись в таблицу, т.к. WAL-уровень таблицы
 выше !RAL-уровня пользователя.
! ошибка 1070
insert into TAB1 values (101,'new1');
! < Метка доступа > добавляемой записи ##3#4.
! Пользователь не может внести строку ##3#4, т.к. RAL-уровень информации ниже
 !WAL-уровня пользователя.
! ошибка 1070
insert into TAB1##3#4 values (102,'new2');
! ошибка 1070
insert into TAB1##4#4 values (103,'new3');
username SYSTEM/MANAGER8

drop user U2 cascade;
create user U2 identified by '12345678';
grant dba to U2;
alter user U2 level("S", "DSP");

! < Метка доступа > пользователя ##3#2.
username U2/12345678

! < Метка доступа > таблицы ##3#2.
create or replace table TAB2 (id int, name char(10));
insert into TAB2##4#4 values (102,'new2');

Информация об уровнях доступа хранится в системной таблице $$$LEVEL (см. документ «СУБД ЛИНТЕР. Системные таблицы и представления», подраздел «$$$LEVEL»).