Разграничение доступа в одной таблице
Когда речь идет о продажах, то возникает ситуация, когда даже в одной таблице различные пользователи должны ”видеть” только разрешенные им данные. Причем другие таблицы (например, таблица курса валют) доступны всем (публичные таблицы).
Примером может служить следующая (несколько упрощенная) схема БД:
-
таблица (
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
, можно обычным образом (как для базовой таблицы) установить правила разграничения доступа.