Проверка полномочий и представления данных
Представление данных – это средство предоставления пользователю его личной модели базы данных. Это также удобный способ ограничения доступа пользователя к различным частям базы данных: данные, которые пользователю не нужно видеть, просто спрятаны от него. Это упрощает работу с системой, повышая попутно защищенность базы данных. Представления данных могут создаться при помощи операции выбора, создания проекций или соединения существующих таблиц. Таким образом, возможности пользователя могут быть ограничены рассмотрением только части некоторой существующей таблицы или же соединения некоторых таблиц.
Типы доступа к представлениям данных. Для каждого представления данных возможны различные типы доступа:
1. Право чтения: позволено только чтение данных, но не их изменение.
2. Право ввода: позволен ввод новых данных, но не изменение существующих.
3. Право обновления: позволено изменение данных, но не их удаление.
4. Право удаления: позволено удаление данных.
Эти типы доступа обычно обеспечиваются назначением для предоставления данных нескольких паролей. Например, предположим, что у нас есть таблица 4.1 «Работник» и мы хотим, чтобы пользователь Васильев имел доступ только к атрибутам № РАБОТНИКА и ФАМИЛИЯ, причем только для чтения. Этого можно добиться, создав представление данных, содержащее только атрибуты № РАБОТНИКА и ФАМИЛИЯ. Для представления данных № РАБОТНИКА_ФАМИЛИЯ можно создать пароль, дающий право доступа только для чтения (команда SQL):
GRANT READ ACCESS ON № РАБОТНИКА_ФАМИЛИЯ TO Васильев
Общая форма такого предоставления права доступа в SQL с командой GRANT выглядит следующим образом:
GRANT <список полномочий > ON <имя представления данных или таблицы>
Рассмотрим пример, в котором используется таблица «Проект», имеющая следующую схему: ПРОЕКТ (№, ФАМИЛИЯ, АДРЕС, ПОЧТОВАЯ ОПЛАТА, ОТДЕЛ). Например, пользователю может быть, разрешено смотреть только среднюю почасовую оплату из таблицы. Такое ограничение поддерживается следующим представлением данных:
CREATE VIEW AVG (№, ФАМИЛИЯ, СР._ОПЛ., OТДЕЛ)
AS SELECT №,ФАМИЛИЯ,AVG (ПОЧ._ ОПЛ),ОТДЕЛ
FROM ПРОЕКТ GROUP BY OТДЕЛ
Обратите внимание, что в представлении данных создается атрибут (СР._ОПЛ), которого не существовало в базовой таблице «Проект». Его значения вычисляются командой SELECT - берется среднее значение атрибута ПОЧТОВАЯ ОПЛАТА для каждого отдела.
Хотя применение представлений данных может быть эффективным средством защиты, система должна уметь приспосабливаться к изменяющимся со временем требованиям. В SQL такую возможность дают команды GRANT и REVOKE. Приведем примеры:
GRANT SELECT ON TABLE C TO Иванов, Петров
Команда означает, что Иванову и Петрову предоставлено право применять любые операции SELECT к таблице «C».
GRANT SELECT, UPDATE (ОТДЕЛ) ON TABLE C TO Петров
Это означает, что Петров имеет право применять любые операции SELECT к таблице «C», а также обновлять значения атрибутов ОТДЕЛ.
REVOKE SELECT ON TABLE C FROM Иванов
Эта команда означает, что Иванов больше не имеет права выполнять операции SELECT над таблицей «С».
Список привилегий, которые относятся к таблицам:
SELECT (выбор)
UPDATE (обновление)
DELETE (удаление)
INSERT (ввод)
Опция GRANT может распространяться на других пользователей. Например, если Иванов имеет право передать привилегию А Петрову, то Петров имеет право передать привилегию А другому пользователю, Васильеву и т.д.
Иванов:
GRANT SELECT ON TABLE C TO Петров WITH GRANT OPTION
Петров:
GRANT SELECT ON TABLE C TO Васильев WITH GRANT OPTION
До тех пор пока пользователь получает GRANT OPTION, он может передавать ту же привилегию другим пользователям.
Если Иванов позже хочет отозвать GRANT OPTION, то он может сделать так:
REVOKE SELECT ON TABLE C FROM Петров
Такой отзыв будет применен как к Петрову, так и ко всем, кому он передал привилегию, и т.д.