
Oracle - MS Server / OracleМП / лекции оракл / lect8_m2_ipovs_ipovs_SUBDOracle_231000.62
.docЛекция 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.
Разновидностью традиционных ограничений целостности являются ограничения состояния и перехода. Смысл их заключается а том, что достаточно часто возникает потребность рассмотреть не только область допустимых значений кортежа, но и переход значений из одного состояния в другое.
Решение вопросов безопасности и целостности как БД в целом, так и ее элементов, позволяют сформулировать и определить соответствующие ограничения целостности, что, в свою очередь, помогает решить проблему несовместимых данных.
Список литературы
-
Илюшечкин В.М. - Учебно-методические разработки для самостоятельной работы студентов, изучающих дисциплину «СУБД Oracle»
-
All-Oracle [Электронный ресурс]. – URL:http://all-oracle.ru/content/view/?part=1&id=68
-
Oracle для профессионалов [Электронный ресурс]. – URL: http://citforum.ru/database/oracle/kyte