Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 700276.doc
Скачиваний:
11
Добавлен:
01.05.2022
Размер:
1.94 Mб
Скачать

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 - после выполнения обновления. Приве­денный пример ограничивает курс, на котором учится студент так, что его можно изменить либо в большую сторону, либо оста­вить без изменений. Действительно - ведь курс не должен уменьшаться. Ограничения состояния и перехода используют только для отношения или БД.

Таким образом, рассмотренные вопросы безопасности и целост­ности как БД в целом, так и ее элементов позволяют сформулиро­вать и определить соответствующие ограничения целостности, что, в свою очередь, помогает решить проблему несовместимых данных.