Табл. 3. Данные, доступные пользователю с высоким уровнем секретности
(Обратим внимание на то, что строка "Иванов Пневмония" здесь отсутствует.)
Размножение строк, обеспечивающее необходимую дисциплину доступа, стандартными средствами
SQL можно реализовать следующим образом:
CREATE TABLE BaseTable1 (
PatientName char (20),
Disease char (20),
Level char (10)
) WITH PRIMARY KEY (PatientName, Level)
;
CREATE TABLE BaseTable2 (
UserName char (20),
SecurityLevel char (10)
) WITH PRIMARY KEY (UserName)
;
CREATE VIEW PatientInfo (
PatientName,
Disease
) AS SELECT PatientName, Disease
FROM TABLE BaseTable1
WHERE BaseTable1.Level = (
SELECT SecurityLevel FROM BaseTable2
WHERE UserName = username ()
) OR (
BaseTable1.Level = "LOW"
AND NOT EXISTS (
SELECT * FROM BaseTable1 AS X
WHERE X.PatientName = BaseTable1.PatientName
AND X.Level = "HIGH"
)
)
;
Всем пользователям предоставляется доступ только к представлению PatientInfo.
Пользователи с низким уровнем благонадежности увидят только информацию, выдаваемую
первой конструкцией WHERE:
WHERE BaseTable1.Level = (
SELECT SecurityLevel FROM BaseTable2
WHERE UserName = username () )
поскольку для них поле SecurityLevel имеет значение "LOW". В формирование представления
для благонадежных пользователей внесут вклад обе конструкции WHERE, причем в случае
совпадения имен менее секретные записи будут заслонены более секретными (конструкция NOT
EXISTS).
Мы видим, что в отличие от систем с меточной безопасностью, стандартные SQL-серверы
предоставляют довольно тяжеловесные средства для реализации механизма размножения строк.
Тем не менее, эти средства не так плохи, как может показаться на первый взгляд. Можно надеяться,
что оптимизатор SQL-запросов, входящий в комплект любой современной СУБД, сделает время
доступа к представлению PatientInfo сравнимым с временем извлечения строк из базовых
таблиц.
Нетрудно понять, что борьба с получением информации путем логического вывода актуальна не
только для медицинских баз данных и что она (борьба) требует кропотливого труда при
проектировании модели данных и иерархии привилегий, а также при реализации видимых
пользователям представлений.