- •Е.И. Асташева сетевые базы данных
- •Введение
- •1. Введение в базы данных
- •1.1. Что такое база данных
- •1.2. Структура базы данных
- •2. Иерархическая и сетевая модели организации данных
- •3. Реляционная модель базы данных
- •3.1. Домены и отношения
- •3.2. Целостность данных
- •3.3. Реляционная алгебра
- •3.4. Реляционное исчисление
- •4. Проектирование логической структуры базы данных
- •4.1. Концепция функциональной зависимости
- •4.2. Нормализация базы данных
- •4.3. Объектное моделирование
- •5. Функции защиты базы данных
- •5.1. Транзакции и параллелизм
- •5.2. Безопасность и целостность баз данных
- •6. Дополнительные аспекты реляционной технологии
- •6.1. Представления
- •6.2. Повышение производительности с помощью оптимизации
- •6.3. Домены, отношения и типы данных
- •6.4. Неопределенные значения и трехзначная логика
- •6.5. Распределенные базы данных
- •7. Технология физического хранения и доступа к данным
- •7.1. Основные этапы доступа к базе данных
- •7.2. Управление страницами
- •7.3. Процедура индексирования и хеширования
- •7.4. Сжатие данных
- •Заключение
- •Библиографический список
- •Оглавление
- •394026 Воронеж, Московский просп., 14
5.2. Безопасность и целостность баз данных
Вопросы безопасности и целостности - еще одна из важнейших сторон работы СУБД. Под безопасностью понимают защиту БД от несанкционированного разрушения, изменения и модификации. Систему можно считать безопасной только в том случае, если пользователю допускается выполнять только разрешенные действия. Целостность БД связана с корректным выполнением этих действий.
В СУБД традиционно поддерживаются избирательный или обязательный подходы обеспечения безопасности данных. При избирательном подходе к управлению безопасностью каждый пользователь обладает различными правами (полномочиями) при работе с тем или иным объектом БД. В случае обязательного подхода каждому объекту БД присваивается уровень доступа, а пользователям - уровни допуска. Разумеется, для получения доступа к объекту пользователь должен обладать соответствующим уровнем допуска.
Оба подхода реализуются в СУБД в виде особых правил безопасности, предусматривающих опознание источника запроса. По этой причине в начале работы пользователь вводит свой идентификатор (логин) и пароль для подтверждения своих полномочий.
Избирательное управление доступом задается правилами, которые должны включать следующее:
- имя правила - представляет собой структуру, по которой это правило идентифицируется системой;
- собственно правила или привилегии - набор директив, составляющих способ и возможность доступа, модификаций и т. п. объектов БД;
- диапазон применения привилегий;
- идентификаторы пользователей, обладающих вышеперечисленными привилегиями;
- действие при нарушении правила - здесь указывается поведение системы в случае, если пользователь нарушил правило безопасности. Как правило, оно заключается в отказе, от выполнения запрашиваемого действия.
Для примера рассмотрим правило безопасности для отношения Р структуры, приведенной на рисунке 4.1.
СОЗДАТЬ ПРАВИЛО БЕЗОПАСНОСТИ RULE1 ДЛЯ МОДИФИКАЦИИ И УДАЛЕНИЯ Р (PN, PNAME, TEACHER, KAFEDRA) ДЛЯ KAFEDRA-''ФИЗИКА" ПОЛЬЗОВАТЕЛИ: Ivan, Denis, Andrew
НЕ ВЫПОЛНЯТЬ ПРИ НАРУШЕНИИ ПРАВИЛА
Приведенное выше правило содержит все пять оговоренных элементов. Фактически создано правило безопасности с именем RULE1, позволяющее модификацию и удаление кортежей (PN, PNAME, TEACHER, KAFEDRA) отношения Р, относящихся к кафедре физики для пользователей с идентификаторами Ivan, Denis и Andrew. Если правило будет нарушено (например, запрашивается оговариваемое действие со стороны пользователя Petr), то в запрашиваемом действии будет отказано.
Обязательное управление доступом к БД реализуется при выполнении следующих правил:
- пользователь имеет возможность работы (но не модификации) с объектом, если уровень его допуска больше или равен уровню доступа объекта;
- пользователь имеет возможность модифицировать объект, если уровень его допуска равен уровню доступа объекта.
Правило безопасности в этом случае для пользователя с идентификатором Denis можно, например, сформулировать следующим образом:
СОЗДАТЬ ПРАВИЛО БЕЗОПАСНОСТИ RULE2 ДЛЯ ПОЛЬЗОВАТЕЛЯ Denis УСТАНОВИТЬ УРОВЕНЬ ДОПУСКА = 5
А для отношения Р, например, вот так:
СОЗДАТЬ ПРАВИЛО БЕЗОПАСНОСТИ RULE3 ДЛЯ МОДИФИКАЦИИ И УДАЛЕНИЯ Р (PN, PNAME, TEACHER, KAFEDRA) УСТАНОВИТЬ УРОВЕНЬ ДОПУСКА = 5
НЕ ВЫПОЛНЯТЬ ПРИ НАРУШЕНИИ ПРАВИЛА
Тогда пользователь Denis имеет доступ для модификации и удаления кортежей отношения Р, поскольку уровень его допуска и уровень доступа к отношению соответствуют друг другу.
Для обеспечения высокого уровня безопасности СУБД ведут журнал выполняемых операций. По этому журналу - с одной стороны можно осуществить восстановление данных, с другой - выявить когда, каким образом и кем были осуществлены несанкционированные действия над БД.
Обычно в файле журнала хранится следующая информация:
- исходный текст запроса;
- имя удаленного терминала, откуда был подан запрос;
- идентификатор пользователя, подавшего запрос;
- дата и время осуществления запроса;
- используемые запросом отношения, кортежи и атрибуты;
- значения данных, с которыми работали до их модификации;
- значения данных, с которыми осуществлялась работа после их модификации.
Помимо вышесказанного, довольно часто для защиты данных используется хранение и передача шифрованных данных. Открытый (незашифрованный) текст шифруется при помощи специальных алгоритмов.
Другой стороной проблемы безопасности и целостности БД является точность и корректность хранимых в ней данных. Обычно этот вопрос решают с помощью ограничений целостности.
Традиционно различают два вида ограничений целостности: немедленно проверяемые и откладываемые. К немедленно проверяемым ограничениям целостности относятся такие ограничения. проверку которых не имеет смысла откладывать на более поздний период. Примером такого ограничения, проверку которого откладывать бессмысленно, являются ограничения домена - оценка по экзамену не может быть менее 1 и более 5 или возраст преподавателя не может превышать 100 лет. Более сложным ограничением, проверку которого невозможно отложить, является следующее: студент не может сдавать экзамен и получить оценку, если у него к этому моменту не сданы все зачеты. Немедленно проверяемые ограничения целостности соответствуют уровню отдельных операторов языкового уровня СУБД. При их нарушениях не производится откат транзакции, а лишь отвергается соответствующий оператор.
Откладываемые ограничения целостности - это ограничения на БД, а не на какие-либо отдельные операции. Обычно такие ограничения проверяются в конце транзакции, и их нарушение вызывает завершение транзакции оператором ROLLBACK. В некоторых СУБД поддерживается специальный оператор проверки ограничений целостности внутри транзакции. Если после выполнения такого оператора обнаруживается, что условия целостности не выполнены, пользователь может сам выполнить оператор ROLLBACK или постараться устранить причины нецелостного состояния БД внутри транзакции.
При соблюдении обязательного требования поддержания целостности БД возможны следующие уровни изолированности транзакций:
- первый уровень - отсутствие потерянных изменений. Рассмотрим следующий пример совместного выполнения двух транзакций. Транзакция 1 изменяет объект базы данных S. До завершения транзакции 1 транзакция 2 также изменяет объект S. Транзакция 2 завершается оператором ROLLBACK, например, по причине нарушения ограничений целостности. Тогда при повторном чтении объекта S транзакция 1 не видит изменений этого объекта, произведенных ранее. Возникает ситуация потерянных изменений. Понятно, она противоречит требованию изолированности пользователей. Чтобы избежать такой ситуации в транзакции 1 требуется, чтобы до завершения транзакции 1 никакая другая транзакция не могла изменять объект S;
- второй уровень - отсутствие чтения данных, модифицируемых другой транзакцией. Рассмотрим такой пример совместного выполнения транзакции 1 и 2. Транзакция 1 изменяет объект базы данных S. Параллельно с этим транзакция 2 читает объект S. Поскольку операция изменения еще не завершена, транзакция 2 видит несогласованные данные. В частности, операция транзакции 1 может быть отвернута при контроле немедленно проверяемого ограничения целостности. Это тоже не соответствует требованию изолированности пользователей (каждый пользователь начинает свою транзакцию при согласованном состоянии БД и вправе ожидать видеть согласованные данные). Чтобы избежать ситуации чтения таких данных, до завершения транзакции 1, изменившей объект S, никакая другая транзакция не должна читать объект S;
- третий уровень - отсутствие неповторяющихся чтений. Рассмотрим следующий сценарий. Транзакция 1 читает объект базы данных S. До завершения транзакции 1 транзакция 2 изменяет объект S и успешно завершается оператором COMMIT. Транзакция 1 повторно читает объект S и видит его измененное состояние. Чтобы избежать неповторяющихся чтений, до завершения транзакции 1 никакая другая транзакция не должна изменять объект S.
Как уже было сказано выше, существует возможность обеспечения разных уровней изолированности для той или иной транзакции путем введения блокировки. Кроме того, может использоваться сериализация транзакций. Способ выполнения набора транзакций называется сериальным, если результат совместного выполнения транзакций эквивалентен результату некоторого последовательного выполнения этих же транзакций.
Сериализация транзакций - это такой механизм их выполнения по некоторому сериальному плану, который обеспечивается на уровне основных функций СУБД, ответственных за управление транзакциями. Система, в которой поддерживается сериализация транзакций, обеспечивает реальную изолированность пользователей.
Основная проблема в реализации состоит в выборе метода сериализации набора транзакций, который не слишком ограничивал бы их параллельность. Простейшим решением является действительно последовательное выполнение транзакций. Но существуют ситуации, в которых можно выполнять операторы разных транзакций в любом порядке с сохранением сериальности. Примерами могут служить только читающие транзакции, а также транзакции, не конфликтующие по объектам БД.
Обычно ограничения целостности применяют для описания базовых отношений - последние содержат данные, отражающие реальную действительность, поэтому их обрабатывают таким образом, чтобы данные были корректными.
В общем случае ограничение целостности должно содержать три основные части:
- имя ограничения - представляет собой структуру, по которой это ограничение идентифицируется системой;
- собственно ограничения -набор директив и команд, составляющих способ и возможность контроля, и представляющий в конечном итоге логическое выражение. Ограничение удовлетворяется, если оно истинно, и нарушается - если оно ложно;
- действие при нарушении ограничения - здесь предписывается действие системы при нарушении ограничения.
Например, ограничение целостности для отношения SP, приведенного на рис. 4.1 можно сформулировать следующим образом:
СОЗДАТЬ ОГРАНИЧЕНИЕ ЦЕЛОСТНОСТИ RULE4 ДЛЯ ВСЕХ SP(SP.OCENKA>0 И SP.OCENKA<6)
НЕ ВЫПОЛНЯТЬ ПРИ НАРУШЕНИИ ПРАВИЛА
В данном примере ограничение целостности накладывается на атрибут OCENKA отношения SP таким образом, что игнорируются все попытки установить оценку менее 1 и более 5. Точнее говоря, в ограничении оговорен допустимый интервал оценок (больше 0 и меньше 6).
При создании ограничения целостности система сначала проверяет, удовлетворяет ли текущее состояние БД новому ограничению. Если это условие не выполняется, то создаваемое ограничение может быть отвергнуто. В противном случае оно принимается и в дальнейшем используется системой.
Различают четыре типа ограничений целостности:
- ограничение целостности домена - им определяется множество значений, из которых состоит домен. Особенности ограничения такого рода заключаются в том. что его имя должно совпадать с именем домена. Эти ограничения можно устранить только за счет устранения самого домена;
- ограничение целостности атрибута - это фактически определение домена, из которого берутся значения для данного атрибута. Имя такого ограничения должно совпадать с именем соответствующего ограничения домена, то есть с именем домена. Проверка осуществляется немедленно, и попытка выполнить действие, нарушающее ограничение, будет отвергнута сразу же. Наконец, ограничения целостности атрибута снимаются только с помощью устранения самого атрибута;
- ограничение целостности отношения - правило, задаваемое только для данного отношения БД. Ограничение целостности отношения всегда проверяется немедленно, то есть при любой попытке модификации отношения осуществляется контроль всех заданных условий. Действие такого ограничения происходит в том случае, когда ограничение (заданное логическим выражением) становится ложным;
- ограничение целостности БД - задается для двух или более связанных между собой отношений. В отличие от других ограничений, эта их разновидность помимо традиционных частей обязательно должно содержать, по крайней мере, одно условие соединения отношений. Обычно это условие содержит две связанные переменные, определенные в двух разных отношениях. Следовательно, ограничение приводит к тому, что отношения будут связаны между собой. Ограничения целостности БД не проверяются немедленно, а их выполнение откладывается до конца выполнения транзакции. В качестве действия на нарушение условия целостности в подавляющем большинстве случаев используется завершение транзакции оператором ROLLBACK.
Разновидностью традиционных ограничений целостности являются ограничения состояния и перехода. Смысл их заключается в том, что достаточно часто возникает потребность рассмотреть не только область допустимых значений кортежа, но и переход значений из одного состояния в другое. Рассмотрим пример такого ограничения для модифицированного отношения S (СТУДЕНТЫ), куда добавлен атрибут KURS - курс, на котором учится студент:
СОЗДАТЬ ОГРАНИЧЕНИЕ ЦЕЛОСТНОСТИ RULE5 ДЛЯ ВСЕХ S(S.KURS >= S'.KURS)
НЕ ВЫПОЛНЯТЬ ПРИ НАРУШЕНИИ ПРАВИЛА
Такое ограничение накладывается на атрибут соответственно S'.KURS - до и S.KURS - после выполнения обновления. Приведенный пример ограничивает курс, на котором учится студент так, что его можно изменить либо в большую сторону, либо оставить без изменений. Действительно - ведь курс не должен уменьшаться. Ограничения состояния и перехода используют только для отношения или БД.
Таким образом, рассмотренные вопросы безопасности и целостности как БД в целом, так и ее элементов позволяют сформулировать и определить соответствующие ограничения целостности, что, в свою очередь, помогает решить проблему несовместимых данных.