Перечень статей   Терминология   Choose language


Права доступа

Разграничения

Права доступа к таблицам

Единственное право доступа, которое существует для всей таблице - это право на внесение в нее записи. Таких прав для каждого пользователя существует столько, сколько существует таблиц в базе данных. Внутри СУБД права одного пользователя резонно объединить в битовый массив, и предоставить доступ к таким битовым массивам через системную таблицу "right2table".

create table right2table (
  user       num,
  table      oid,
  right      bit          -- 1=yes, 0=no
)

Права доступа к отраслям

Остальные права доступа предоставляются пользователю на каждую запись отдельно. Все записи базы данных, независимо от того, каким таблицам они принадлежат, разбиваются на несколько непересекающихся множеств - отраслей (department). Конкретный пользователь имеет одинаковые права доступа ко всем записям одной отрасли. В записи может существовать единственное поле натурального типа, в котором указывается номер отрасли - мы будем помечать такие поля как "legal" (правовое). Если на какую-либо операцию с записью у пользователя нет прав, то запись для данного пользователя не существует (он ее не видит в рамках данной операции). Если в записи нет правового поля, то пользователь имеет все права на эту запись. Это поле доступно для записи на тех же основаниях, что и все остальные поля записи.

create table anytable (
  a1         int,
  a2         num legal
)

Любому пользователю, вносящему данные, нужно право на обновление, т.к. он может ошибиться в вносимых значениях. Любой изменяющий поля может записать в них бессмысленные значения или присвоить полям "null" - и то, и другое равносильно удалению записи. Очень странно выглядело бы право на обновление без права на чтение. Отсюда следует, что право на обновление бессмысленно без прав на удаление и чтение и должно быть дополнено ими - такое целостное право назовем правом оперировать (operate = update + delete + read). Таким образом доступ к отраслям принимает только три значения: чтение, оперирование, отсутствие доступа.

Внутри СУБД права одного пользователя резонно объединить в массив, и предоставить доступ к таким массивам через системную таблицу "right2department".

create table right2department (
  user       num,
  department num,
  right[]    bit2              -- 10=read, 01=operate, 00=no rights
)

След

Значение, которое по умолчанию присваивается правовому полю каждой записи, внесенной пользователем в базу данных, называется следом (trace). Имя пользователя, его пароль (в зашифрованном виде) и след перечислены в системной таблице "sys4user".

create table sys4user (
  id         num,
  username   string,
  password   string,
  trace      num
)

Вторичное поле

Записи, полученные графическим интерфейсом, должны иметь пометку о том, может пользователь поля только читать или еще и изменять. Такая однобитная пометка вычисляется на основе значения правового поля и элемента массива 'right' таблицы 'right2department'. Вычисленное значение удобно высылать в самой записи в дополнительном поле типа 'bit1' (0=read only, 1=operate). Такие "вычисленные" поля реально не существуют, и мы будем помечать их как "secondary" (но они не доступны для записи, в отличие от полей с пометкой 'fictional').

create table anytable (
  a1         int,
  a2         num legal,
  a3         bit1 secondary
)

Тюрин Дмитрий



Перечень статей   Терминология   Choose language


Сайт управляется системой uCoz