Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Oracle - MS Server / OracleМП / лекции оракл / lect8_m2_ipovs_ipovs_SUBDOracle_231000.62

.doc
Скачиваний:
36
Добавлен:
17.04.2018
Размер:
89.09 Кб
Скачать

Лекция 8. Обеспечение целостности данных при выполнении транзакций.

Вопросы безопасности и целостности - еще одна из важнейших сторон работы СУБД. Под безопасностью понимают защиту БД от несанкционированного разрушения, изменения и модификации. Систему можно считать безопасной только в том случае, если поль­зователю допускается выполнять только разрешенные действия. Целостность БД связана с корректным выполнением этих действий.

В СУБД традиционно поддерживаются избирательный или обязательный подходы обеспечения безопасности данных. При избирательном подходе к управлению безопасностью каждый пользователь обладает различными правами (полномочиями) при работе с тем или иным объектом БД. В случае обязательного подхода каждому объекту БД присваивается уровень доступа, а пользователям - уровни допуска. Разумеется, для получения до­ступа к объекту пользователь должен обладать соответствующим уровнем допуска.

Оба подхода реализуются в СУБД в виде особых правил безо­пасности, предусматривающих опознание источника запроса. По этой причине в начале работы пользователь вводит свой иденти­фикатор (учетное имя) и пароль для подтверждения своих полномочий.

Избирательный подход к управлению доступом задается правилами, ко­торые должны включать следующее [1]:

  • имя правила - представляет собой структуру, по которой это правило идентифицируется системой;

  • собственно правила или привилегии - набор директив, со­ставляющих способ и возможность доступа, модификации и т.п. объектов БД;

  • диапазон применения привилегий;

  • идентификаторы пользователей, обладающих вышеперечисленными привилегиями;

  • действие при нарушении правила - здесь указывается по­ведение системы в случае, если пользователь нарушил правило безопасности. Как правило, оно заключается в от­казе от выполнения запрашиваемого действия.

Обязательный подход к управлению доступом реализуется при вы­полнении следующих правил:

  • пользователь имеет возможность работы (но не модифи­кации) с объектом, если уровень его допуска больше или равен уровню доступа объекта;

  • пользователь имеет возможность модифицировать объект, если уровень его допуска равен уровню доступа объекта.

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

Традиционно различают два вида ограничений целостности: не­медленно проверяемые и откладываемые. К немедленно проверяе­мым ограничениям целостности относятся такие ограничения, про­верку которых не имеет смысла откладывать на более поздний период. Примером такого ограничения, проверку которого откла­дывать бессмысленно, являются ограничения домена (например, общий доход жителя не может быть отрицательным числом). Немедленно проверяемые ограничения целостности соответствуют уровню отдельных опера­торов языкового уровня СУБД. При их нарушениях не производится откат транзакции, а лишь отвергается соответствующий оператор.

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

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

Сериализация транзакций - это такой механизм их выполне­ния по некоторому плану, который обеспечивается на уровне ос­новных функций СУБД, ответственных за управление транзак­циями. Система, в которой поддерживается сериализация транзак­ций, обеспечивает реальную изолированность пользователей.

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

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

В общем случае ограничение целостности должно содержать три основные части [1]:

  • имя ограничения, представляющее собой структуру, по ко­торой это ограничение идентифицируется системой;

  • собственно ограничения, задаваемые набором директив и команд, со­ставляющих способ и возможность контроля, и представляющие в конечном итоге логическое выражение. Ограничение удовлетворяется, если оно истинно, и нарушает­ся, если оно ложно;

  • действие, выполняемое системой при нарушении ограничения.

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

Различают четыре типа ограничений целостности [1]:

  • ограничение целостности домена определяет множество значений, из которых состоит домен. Особенности ограничения такого рода заключаются в том, что его имя должно совпадать с именем домена. Кроме того, поскольку домены сами по себе не обновляются, то отпадает не­обходимость предусматривать реакцию на нарушение ограничения. Более того, эти ограничения можно устра­нить только за счет устранения самого домена;

  • ограничение целостности атрибута является разновидностью опреде­ления домена, из которого берутся значения для данного атри­бута. Имя такого ограничения должно совпадать с именем со­ответствующего ограничения домена, т.е. с именем домена. Проверка осуществляется немедленно, и попытка выполнить действие, нарушающее ограничение, будет отвергнута сразу же. Наконец, ограничения целостности атрибута снимаются только с помощью устранения самого атрибута;

  • ограничение целостности отношения - правило, задавае­мое только для данного отношения БД. Ограничение це­лостности отношения всегда проверяется немедленно, т.е. при любой попытке модификации отношения осуществля­ется контроль всех заданных условий. Действие такого ог­раничения происходит в том случае, когда ограничение (заданное логическим выражением) становится ложным;

  • ограничение целостности БД задается для двух или более связанных между собой отношений (таблиц). В отличие от других ограничений, эта их разновидность помимо традиционных частей обязательно должна включать, по крайней мере, одно условие соединения отношений: обычно это условие содержит две свя­занные переменные, определенные в двух разных отношениях. Следовательно, ограничение приводит к тому, что отношения будут связаны между собой. Ограничения целостности БД не проверяются немедленно, а их выполнение откладывается до конца выполнения транзакции. В качестве действия на нарушение условия целостности в подавляющем большинстве случаев используется завершение транзакции оператором ROLLBACK.

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

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

Список литературы

  1. Илюшечкин В.М. - Учебно-методические разработки для самостоятельной работы студентов, изучающих дисциплину «СУБД Oracle»

  2. All-Oracle [Электронный ресурс]. – URL:http://all-oracle.ru/content/view/?part=1&id=68

  3. Oracle для профессионалов [Электронный ресурс]. – URL: http://citforum.ru/database/oracle/kyte

7