Разграничение доступа в одной таблице

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

Примером может служить следующая (несколько упрощенная) схема БД:

  • таблица (Weapon) – общий справочник вооружений;

  • таблица характеристик оружия (Descriptions);

  • таблица курса валют (Currency).

Во-первых, со второй таблицей будет работать группа узких специалистов, которым вовсе незачем ”видеть” то, в чем они не разбираются.

Для этого владелец таблицы Descriptions должен сделать из нее несколько представлений по числу специалистов (или групп специалистов), например, так:

CREATE VIEW "Легкие танки" AS
SELECT * FROM Descriptions WHERE Type ='Легкий танк';

CREATE VIEW "Тяжелые танки" AS
SELECT * FROM Descriptions WHERE Type ='Тяжелый танк';

CREATE VIEW "Истребители" AS
SELECT * FROM Descriptions WHERE Type ='Истребитель';
	…

Кроме того, в группе технических и маркетинговых специалистов, представляющих, скажем, самолеты-истребители, также возможно разделение по доступу. Не все столбцы (читай не все характеристики) представления Истребители должны быть доступны всем субъектам группы.

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

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