Компоненты SQL
Разным пользователям, в зависимости от их потребностей, можно предоставить доступ разного уровня. Несколько примеров такой возможности показывают следующие команды:
GRANT SELECT ON CUSTOMER TO SALES_MANAGER;
В этом случае один пользователь, менеджер по продажам, получает возможность просматривать таблицу CUSTOMER (клиент).
В следующем примере показана команда, благодаря которой каждый пользователь имеющий доступ к системе, получает возможность просматривать розничный прайс-лист:
GRANT SELECT ON RETAIL_PRICE_LIST TO PUBLIC;
Ниже приведен пример команды, которая дает возможность менеджеру по продажам видоизменять розничный прайс-лист. Менеджер по продажам может менять содержимое имеющихся строк, но добавлять или удалять строки он не может.
GRANT UPDATE ON RETAIL_PRICE_LIST TO SALES_MANAGER;
В следующем примере приведена команда, позволяющая менеджеру по продажам добавлять в розничный прайс-лист новые строки:
GRANT INSERT ON RETAIL_PRICE_LIST TO SALES_MANAGER;
А теперь благодаря команде из следующего примера менеджер по продажам может также удалять из таблицы ненужные строки:
GRANT DELETE ON RETAIL_PRICE_LIST TO SALES_MANAGER;
Ограничения ссылочной целостности угрожают вашим данным
Возможно, вы думаете, что если можете контролировать функции просмотра, создания, изменения и удаления в таблице, то вы надежно защищены. В большинстве случаев это правда. Однако с помощью непрямого метода опытный хакер все равно имеет возможность сделать подкоп под вашу базу.
Правильно спроектированная реляционная база данных имеет ссылочную целостность, т.е. данные в одной таблице из базы данных согласуются с данными во всех других таблицах. Чтобы обеспечить ссылочную целостность, проектировщики баз данных применяют к таблицам такие ограничения, которые относятся к вводимым в таблицу данным. И если ваша база данных имеет ограничения ссылочной целостности, то какой-либо пользователь может создать новую таблицу, где в качестве внешнего ключа используется столбец из засекреченной таблицы вашей базы. Вполне возможно, что в таком случае этот столбец можно использовать в качестве канала кражи конфиденциальной информации.
Скажем, вы, например, являетесь знаменитым аналитиком с Уолл-Стрит. Многие верят в точность вашего биржевого анализа, и если вы рекомендуете подписчикам своего бюллетеня какие-либо ценные бумаги, то многие люди их покупают, и стоимость этих бумаг растет. Ваш анализ хранится в базе данных, в которой находится таблица FOUR_STAR. В этой таблице содержатся самые лучшие рекомендации, предназначенные для следующего выпуска вашего бюллетеня. Естественно, что доступ к FOUR_STAR ограничен, чтобы ни слова не просочилось в массу инвесторов, пока бюллетень не дойдет до ваших платных подписчиков.
Вы будете находиться в уязвимом положении, если кому-то удастся создать таблицу, в качестве внешнего ключа которой используется поле таблицы FOUR_STAR, содержащее названия ценных бумаг. Вот, например, команда, создающая такую таблицу:
CREATE TABLE HOT_STOCKS ( STOCK CHARACTER (30) REFERENCES FOUR_STAR );