- •Глава 1. Базы данных и системы управления 9
- •Глава 2. Организация доступа к данным 45
- •Глава 3. Реляционная алгебра 60
- •Глава 4. Основы sql 67
- •Глава 5. Проектирование реляционных баз данных 89
- •Глава 6. Взаимодействие sql с приложениями 116
- •Глава 7. Некоторые проблемы администрирования баз данных 154
- •Базы данных и системы управления
- •Файловые системы
- •Концепция баз данных
- •Основные функции субд
- •Непосредственное управление данными во внешней памяти
- •Управление буферами оперативной памяти
- •Управление транзакциями
- •Журнализация
- •Поддержка языков баз данных
- •Трехуровневая модель архитектуры систем баз данных
- •Модели данных
- •Характеристика связей
- •Компьютерно-ориентированные модели данных
- •Реляционный подход
- •Ключи и целостность реляционных данных
- •Моделирование концептуальной схемы базы данных
- •Организация доступа к данным
- •Страницы и файлы
- •Индексирование
- •Структуры типа б-дерева
- •Хеширование
- •Методы сжатия
- •Метод дифференциального сжатия
- •Иерархические методы сжатия
- •Кодирование по методу Хаффмена
- •Реляционная алгебра
- •Традиционные реляционные операции
- •Специальные реляционные операции
- •Дополнительные реляционные операции
- •Примеры использования реляционной алгебры для выражения словесных запросов в виде формул
- •Основы sql
- •Типы данных
- •Строковые типы данных
- •Битовые типы данных
- •Точные числовые типы данных
- •Вещественные числовые типы данных
- •Календарные типы данных
- •Значения null
- •Создание и обслуживание таблиц
- •Запрос на выборку
- •Статистические функции
- •Создание соединений
- •Вложенные запросы
- •Запрос на объединение
- •Запросы, выполняющие реляционные операции вычитания, пересечения и деления
- •Запросы на изменение
- •Перекрестные запросы
- •Проектирование реляционных баз данных
- •Нормализация отношений
- •Функциональные зависимости
- •Н ормальные формы, обоснованные функциональными зависимостями
- •Нормальная форма Бойса–Кодда
- •Нормальные формы, обоснованные более сложными зависимостями
- •Процедура нормализации и проектирования
- •Пример проектирования базы данных
- •Назначение и предметная область
- •Проектирование базы данных
- •Взаимодействие sql с приложениями
- •Встраивание sql-операторов в программный код
- •Тип курсора
- •Триггеры
- •Хранимые процедуры
- •Стандартные интерфейсы для доступа к данным
- •Информационное окружение веб-сервера
- •Стандарт odbc
- •Уровни соответствия
- •Уровень соответствия odbc
- •Задание имени источника данных odbc
- •Расширяемый язык разметки xml
- •Xml как язык разметки
- •Материализация хмl-документов с помощью xslt
- •Создание хмl-документов на основе информации из базы данных
- •Некоторые проблемы администрирования баз данных
- •Оптимизация запросов
- •Параллельная обработка данных
- •Потеря обновления
- •Зависимость от незафиксированных обновлений
- •Несогласованный анализ
- •Блокировки транзакций
- •Согласованность и уровень изоляции транзакций
- •Распределенные системы баз данных
- •Фрагментация
- •Репликация
- •Распространение обновлений
- •Управление каталогом
- •Распределенная обработка запросов
- •Типы распределенных систем баз данных
- •Нераспределенные мультибазовые субд
- •Клиент-серверные системы
- •Системы с общими ресурсами
- •Технические аспекты администрирования базы данных
- •Восстановление базы данных
- •Безопасность баз данных
- •Шифрование данных
- •Производительность баз данных
- •Администрирование данных
- •Литература
Шифрование данных
До сих пор подразумевалось, что предполагаемый нелегальный пользователь пытается незаконно проникнуть в базу данных с помощью обычных средств доступа, имеющихся в системе. Теперь следует рассмотреть случай, когда такой пользователь пытается проникнуть в базу данных, минуя систему, т.е. физически перемещая часть данных или подключаясь к коммуникационному каналу. Наиболее эффективным методом борьбы с такими угрозами является шифрование данных, т.е. хранение и передача особо важных данных в зашифрованном виде. Открытый текст шифруется с помощью специального алгоритма шифрования. В качестве входных данных для такого алгоритма выступают открытый текст и ключ шифрования, а в качестве выходных – зашифрованная форма открытого текста, которая называется зашифрованным текстом. Ключ шифрования обязательно хранится в секрете. Именно зашифрованный текст, который непонятен тем, кто не обладает ключом шифрования, хранится в базе данных и передается по коммуникационному каналу.
Если ключ известен, то процедура расшифровки может быть выполнена достаточно просто. Вопрос заключается в том, насколько сложно нелегальному пользователю определить ключ шифрования, обладая открытым и зашифрованным текстом. В идеале схема шифрования должна быть такой, чтобы усилия, затраченные на ее расшифровку, во много раз превышали полученные при этом выгоды. (Фактически это замечание применимо ко всем аспектам проблемы обеспечения безопасности: т.е. стоимость осуществления попыток взлома системы безопасности должна быть значительно выше потенциальной выгоды от этого.) Предельной целью поиска таких схем следует считать схему, для которой сам ее разработчик, обладая открытым и зашифрованным вариантами одной и той же части текста, не в состоянии определить ключ и, следовательно, расшифровать другую часть зашифрованного текста.
Более надежным считается метод шифрования на основе открытого ключа, когда доступны как алгоритм шифрования, так и ключ шифрования, а в секрете хранится только ключ расшифровки. Ключ расшифровки не может быть выведен из ключа шифрования.
Производительность баз данных
Как правило, в многопользовательских системах администратору разрешается задавать параметры настройки системы – какая часть базы данных может преобразовываться в оперативной памяти в конкретный момент времени, сколько исходных и преобразованных данных должно быть буферизовано, сколько процессов может одновременно инициировать отдельный пользователь, сколько блокировок может получить отдельная транзакция и т.д. Администратор базы данных должен контролировать возможные блокировки объектов базы данных, так как существует опасность возникновения взаимной блокировки (deadlock). Пусть, например, две транзакции Т1 и Т2 используют объекты О1 и O2 базы данных. Может возникнуть ситуация, когда обеим транзакциям требуются блокировки обоих объектов. Рассмотрим такую последовательность событий:
Т1 блокирует объект О1.
Т2 блокирует объект О2.
Т1 запрашивает блокировку объекта О2. Ей необходимо ожидать.
Т2 запрашивает блокировку объекта О1. Ей также приходится ожидать.
В системе, где блокировки не снимаются до тех пор, пока транзакции не будут готовы произвести фиксацию, такое ожидание будет бесконечным. Эта ситуация называется взаимной блокировкой. Ни одна транзакция не может продолжаться, пока другая не снимет блокировку. В такой ситуации администратор должен вмешаться и прервать одну или обе транзакции.
Администратор базы данных должен осуществлять мониторинг функционирования базы данных, чтобы иметь возможность принимать решения о количестве ресурсов, выделяемых отдельным пользователям и их приложениям, а также базе данных в целом. Мониторинг также помогает выявлять взаимные блокировки. Многие системы предлагают специальные средства осуществления мониторинга, которые помогают администратору в сборе информации о функционировании базы данных.
Важный аспект производительности базы данных – ее доступность. Администратор должен следить за тем, чтобы стандартные "внутренние" процедуры, такие как создание архивных копий базы данных и проведение модернизаций, как можно меньше отражались на использовании базы данных.
В обязанности администратора также входит мониторинг размеров базы данных. Если создается впечатление, что они могут превысить имеющееся дисковое пространство, администратор должен вмешаться и добавить дополнительную дисковую память или запретить пользователям создавать новые данные, так как в противном случае произойдет сбой базы данных. Как уже отмечалось, администратор также отвечает за управление базой данных в случае непредвиденных обстоятельств, чтобы как можно быстрее сделать ее доступной.