Использование представлений для управления доступом
СУБД предоставляют специфическое средство управления доступом - представления.
Представления позволяют сделать видимыми для субъектов определенные столбцы базовых
таблиц (реализовать проекцию) или отобрать определенные строки (реализовать селекцию). Не
предоставляя субъектам прав доступа к базовым таблицам и сконструировав подходящие
представления, администратор базы данных защитит таблицы от несанкционированного доступа и
снабдит каждого пользователя своим видением базы данных, когда недоступные объекты как бы
не существуют.
Приведем пример создания представления, содержащего два столбца исходной таблицы и
включающего в себя только строки с определенным значением одного из столбцов:
CREATE VIEW empview AS
SELECT name, dept
FROM employee
WHERE dept = 'shoe';
Предоставим всем право на выборку из этого представления:
GRANT SELECT
ON empview
TO PUBLIC;
Субъекты, осуществляющие доступ к представлению empview, могут пытаться запросить
сведения об отделах, отличных от shoe, например:
SELECT *
FROM empview
WHERE dept = 'toy';
но в ответ просто получат результат из нуля строк, а не код ответа, свидетельствующий о
нарушении прав доступа. Это принципиально важно, так как лишает злоумышленника
возможности получить список отделов косвенным образом, анализируя коды ответов,
возвращаемые после обработки SQL-запросов.