Единственное право доступа, которое существует для всей таблице - это право на внесение в нее записи. Таких прав для каждого пользователя существует столько, сколько существует таблиц в базе данных. Внутри СУБД права одного пользователя резонно объединить в битовый массив, и предоставить доступ к таким битовым массивам через системную таблицу "right2table".
Остальные права доступа предоставляются пользователю на каждую запись отдельно. Все записи базы данных, независимо от того, каким таблицам они принадлежат, разбиваются на несколько непересекающихся множеств - отраслей (department). Конкретный пользователь имеет одинаковые права доступа ко всем записям одной отрасли. В записи может существовать единственное поле натурального типа, в котором указывается номер отрасли - мы будем помечать такие поля как "legal" (правовое). Если на какую-либо операцию с записью у пользователя нет прав, то запись для данного пользователя не существует (он ее не видит в рамках данной операции). Если в записи нет правового поля, то пользователь имеет все права на эту запись. Это поле доступно для записи на тех же основаниях, что и все остальные поля записи.
Любому пользователю, вносящему данные, нужно право на обновление, т.к. он может ошибиться в вносимых значениях. Любой изменяющий поля может записать в них бессмысленные значения или присвоить полям "null" - и то, и другое равносильно удалению записи. Очень странно выглядело бы право на обновление без права на чтение. Отсюда следует, что право на обновление бессмысленно без прав на удаление и чтение и должно быть дополнено ими - такое целостное право назовем правом оперировать (operate = update + delete + read). Таким образом доступ к отраслям принимает только три значения: чтение, оперирование, отсутствие доступа.
Внутри СУБД права одного пользователя резонно объединить в массив, и предоставить доступ к таким массивам через системную таблицу "right2department".
Значение, которое по умолчанию присваивается правовому полю каждой записи, внесенной пользователем в базу данных, называется следом (trace). Имя пользователя, его пароль (в зашифрованном виде) и след перечислены в системной таблице "sys4user".
Записи, полученные графическим интерфейсом, должны иметь пометку о том, может пользователь поля только читать или еще и изменять. Такая однобитная пометка вычисляется на основе значения правового поля и элемента массива 'right' таблицы 'right2department'. Вычисленное значение удобно высылать в самой записи в дополнительном поле типа 'bit1' (0=read only, 1=operate). Такие "вычисленные" поля реально не существуют, и мы будем помечать их как "secondary" (но они не доступны для записи, в отличие от полей с пометкой 'fictional').