Уровни доступа
Уровни доступа вводятся для проверки на уровне ядра СУБД ЛИНТЕР прав на осуществление чтения/записи информации.
Вводятся следующие уровни доступа:
-
для пользователя (субъекта):
-
RAL-уровень доступа. Пользователь может получать (читать) информацию, RAL-уровень которой не выше его собственного уровня доступа;
-
WAL-уровень доверия на понижение уровня конфиденциальности. Пользователь не может вносить информацию с уровнем доступа (RAL-уровнем) более низким, чем данный WAL-уровень пользователя. То есть пользователь не может сделать доступную ему информацию менее конфиденциальной, чем указано в данном параметре.
-
-
для информации:
-
RAL-уровень чтения. Пользователь может получать (читать) информацию, RAL-уровень которой не выше его собственного RAL-уровня (может читать менее конфиденциальные данные);
-
WAL-уровень ценности или уровень доступа на запись (модификацию, удаление). Пользователь может модифицировать (удалять) информацию, WAL-уровень которой не выше его RAL-уровня.
-
Возможные соотношения уровней представлены в таблице 1.
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»).