Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
16-30.doc
Скачиваний:
2
Добавлен:
17.04.2019
Размер:
167.42 Кб
Скачать

29. Sql. Представления и технологические операции над ними.

Механизм представлений (view) является мощным средством языка SQL, позволяющим скрыть реальную структуру БД от некоторых пользователей за счет определения представления БД, которое реально является некоторым хранимым в БД запросом с именованными столбцами, а для пользователя ничем не отличается от базовой таблицы БД (с учетом технических ограничений). Любая реализация технологии представлений должна гарантировать соответствие представления базовым таблицам, на которых оно определено. Обычно вычисление представления производится каждый раз при его использовании.

В стандарте SQL оператор определения представления имеет следующий синтаксис:

CREATE VIEW имя_представления [ столбец, ...]

AS запрос [WITH CHECK OPTION]

Определяемое представление имя_представления является изменяемым (т.е. по отношению к нему можно использовать операторы INSERT, DELETE и UPDATE) в том и только в том случае, если выполняются следующие условия для спецификации запроса:

1. В списке выборки не указано ключевое слово DISTINCT.

2. В списке выборки указаны только столбцы, и каждый столбец не указан более одного раза.

3. В разделе FROM указана только одна таблица, являющаяся либо базовой таблицей, либо изменяемой представляемой таблицей.

4. В условии выборки раздела WHERE не используются подзапросы.

5. В табличном выражении отсутствуют разделы GROUP BY и HAVING.

Указанные ограничения являются очень сильными. В конкретных реализациях они могут быть ослаблены.

Если в списке выборки спецификации запроса имеется хотя бы одно арифметическое выражение не являющееся именем столбца, или если одно имя столбца участвует в списке выборки более одного раза, определение представления должно содержать список всех имен столбцов представляемой таблицы.

Требование WITH CHECK OPTION в определении представления имеет смысл только в случае определения изменяемой представляемой таблицы, которая определяется спецификацией запроса, содержащей раздел WHERE. При наличии этого требования не допускаются изменения представляемой таблицы, которые приводят к появлению в базовых таблиц строк, не видимых в представляемой таблице (т.е. таких строк, которые не удовлетворяют условию поиска раздела WHERE спецификации запроса). Если WITH CHECK OPTION в определении представления отсутствует, такой контроль не производится.

Удаление представлений выполняется оператором

DROP VIEW имя_представления

[RESTRICT | CASCADE]

Оператор действует аналогично оператору DROP TABLE.

30.Безопасность баз данных.

Все опасные места устраняются правильной разработкой структуры базы данных и использующего ее приложения.

Планирование баз данных

Первый шаг всегда – создание базы данных, за исключением случаев использования чужих баз. Когда создается база данных, ей назначается владелец. Обычно только один владелец ("суперпользователь") может делать что угодно с объектами внутри этой базы данных и для того, чтобы позволить другим пользователям использовать ее, им должны быть назначены права доступа.

Приложения никогда не должны подключаться к базе данных в роли ее владельца или "суперпользователя", поскольку в этом случае пользователи могут произвести любые действия вроде модификации схемы или удаления всего ее содержимого.

Можно создать различных пользователей баз данных для каждого необходимого действия приложений, очень сильно ограничивая доступ последних к объектам базы данных. Требуемые права должны назначаться однократно, их использования в других местах приложения нужно избегать. Это значит, что если злоумышленник получит доступ с использованием той или иной учетной записи, он сможет получить лишь тот доступ, которым обладала использованная часть программы.

В приложения лучше не вводить всю логику работы с базами данных. Это можно сделать и в самой базе данных с использованием флагов, представлений, правил и встроенных процедур.

Подключение к базе данных

Можно устанавливать подключения с помощью SSL для шифрования соединений клиент-сервер, что дает повышенную безопасность. А можно использовать ssh для шифрования сетевых соединений между клиентами и сервером баз данных. Любой из этих способов сильно усложняет отслеживание и получение информации из сетевого траффика.

Хранение зашифрованных данных

SSL/SSH защищает данные только по пути от клиента к серверу, но не данные, хранимые в базе данных. SSL - лишь сетевой протокол.

Шифрование – весьма хороший прием в этом случае, но такой способ поддерживают ныне лишь очень немногие системы управления базами данных.

Самый легкий путь в этом случае – создать свою собственную систему шифрования, а затем использовать ее в скриптах на PHP. Программа шифрует сохраняемые данные и расшифровывает получаемые.

В случае скрытых данных, где не требуется их исходный вид (к примеру, для отображения), можно использовать хеширование. Известным примером хеширования является сохранение в базе данных хеша MD5 от пароля вместо самого пароля.

Техника защиты

1) Никогда не соединяйтесь с базой данных в роли суперпользователя или владельца. Всегда используйте специальных пользователей с минимумом прав.

2) Проверяйте ввод на совпадение типа данных с требуемым.

3) Предваряйте любой нечисловой ввод, передаваемый в базу данных

4) Не выводите никакой информации о структуре базы данных ни коим образом.

5) Можно использовать хранимые процедуры и заданные расположения для того, чтобы отвязать обращение к данным от программы так, чтобы пользователи не имели прямого доступа к таблицам и представлениям.

Кроме того, ведите журнал операций в программе или собственно в базе данных, если это поддерживается. Ведение журнала не предотвратит внедрения, но оно поможет определить, какая часть программы была поставлена под удар. Сам журнал бесполезен – полезна хранимая в нем информация.

Операторы защиты и управления данными

CREATE ASSERTION – создать ограничение;

DROP ASSERTION – удалить ограничение;

GRANT – предоставить привилегии пользователю или приложению на манипулирование объектами;

REVOKE – отменить привилегии пользователя или приложения;

Транзакции – последовательности операций над базой данных, которая воспринимается системой как одна неделимая операция. При классическом подходе к управлению транзакциями следуют принципу ACID (Atomicy, Consistency, Isolation, Durability).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]