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

Ю. А. Григорьев, Г. И. Ревунков - Банки данных

.pdf
Скачиваний:
322
Добавлен:
10.02.2015
Размер:
7.54 Mб
Скачать

4. Методы специальной обработки

Идентификация пользователя

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

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

Процесс идентификации пользователя выполняется с использованием либо: системного идентификационного номера пользователя, машиночи­ таемых идентификационных карт или знаков, номера терминала, запросив­ шего сеанс работы (в последнем случае должны быть использованы органи­ зационные меры, обеспечивающие возможность работы с определенного терминала только определенных лиц).

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

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

Например, система выдает пользователю псевдослучайное число х. Пользователь выполняет в уме преобразование этого числа по алгоритму, известному только ему и системе (например, составить число из 1-й и 7-й цифр числа JC, затем сложить это число с некоторой константой и умножить на число, соответствующее времени начала сеанса, например на 3 часа дня) и передает результат у = Т(х) системе. Система выполняет такое же преоб­ разование, сравнивает результаты и при их совпадении начинает работу с пользователем. Для постороннего наблюдателя, который если и увидит на экране дисплея идентификационный номер — числа h и у, — то этой ин­ формации явно недостаточно, чтобы ею воспользоваться.

Управление доступом

Для каждого пользователя система ведет паспорт пользователя, со­ ставленный АБД, в котором указан системный идентификационный номер пользователя, имя процедуры подтверждения подлинности, перечень раз-

110

4.1. Обеспечение защиты данных в базе

решенных для данного пользователя операций. Паспорт определяет про­ филь (права) пользователя.

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

условие, которому должен удовлетворять пользователь, чтобы иметь доступ к этому групповому данному;

пароль, предъявляемый при выборке некоторых комбинаций данных из этого группового данного;

пароль, предъявляемый при модификации этих данных, и т.п. Система управления БД проверяет, не нарушено ли какое-либо огра­

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

Алгоритмы подобной программы базируются на аксиоме безопасно­ сти и реализуют 14 различных проверок. Аксиома безопасности заключает­ ся в следующем. Если комбинация атрибутов А доступна (запрещена) поль­ зователю X в зависимости от условия 5, то каждая подкомбинация А также доступна (запрещена) пользователю X по условию В.

Состав проверок следующий:

1.Все ли отношения, упомянутые в запросе, доступны пользователю^?

2.Существует ли упомянутое в запросе отношение, запрещенное для Х?

3.Все ли поколения, упомянутые в запросе, доступные?

4.Существует ли упомянутое в запросе поколение, запрещенное для X?

5.Все ли атрибуты, упомянутые в запросе, доступны для XI

6.Существует ли упомянутый в запросе атрибут, запрещенный для Jf?

7.Все ли комбинации атрибутов, упомянутые в запросе, доступны для X?

8.Существует ли упомянутая в запросе комбинация атрибутов, за­ прещенная для XI

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

111

4.Методы cneyuaibHoii обработки

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

11.Выполняется ли проверка 7 для X, расширенного косвенными ат­ рибутами пользователя?

12.Выполняется ли проверка 8 для Д расширенного косвенными ат­ рибутами пользователя?

13.Выполняется ли проверка 9 для X, расширенного косвенными ат­ рибутами пользователя?

14.Выполняется ли проверка 10 для X, расширенного косвенными ат­ рибутами пользователя?

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

Защита данных при статической обработке

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

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

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

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

112

4.2. Обеспечение целостности данных

данных. Пусть ключ записи состоит из к полей; кроме того, предполагается, что в запросе допускается специфировать не более S полей ключа (т.е. вы­ полняется поиск по частичному соответствию ключа). Тогда, если S<k, никакая статистическая функция, использующая только операции сложения, вычитания, умножения и деления, не позволит определить значение данного конкретной записи.

Физическая защита

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

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

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

4.2. Обеспечение целостности данных

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

Имеются два основных вида ограничения целостности, которые должны поддерживаться СУБД:

структурные ограничения. Эти ограничения во многих случаях зада­ ются функциональными зависимостями и проверяются путем проверки ра­ венства значений соответствующих данных в базе;

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

Существуют и другие ограничения целостности. Например, огра­ ничения на условия выполнения параллельных операций над данными в

113

4. Методы специальной обработки

базе; ограничения типа старый—новый, когда БД переходит в новое состояние.

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

Рассмотрим примеры различных типов ограничений целостности.

1. Значения первичного ключа любого отношения (файла) должны быть уникальны.

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

Эти два примера соответствуют структурным ограничениям.

3.В заданном отношении для каждого кортежа между значением поля А

изначением поля В должно всегда выполняться условие, что первое больше второго. Ограничение специфицируется специальным выражением.

4.Значения, которые принимает некоторый атрибут, должны быть ог­ раничены заданным диапазоном. Ограничение специфицируется специаль­ ным выражением.

5.Для некоторого атрибута (или комбинации атрибутов) может суще­ ствовать конечный (небольшой по размеру) набор допустимых значений (например, по атрибуту ОБРАЗОВАНИЕ могут быть только значения НАЧАЛЬНОЕ, НЕПОЛНОЕ СРЕДНЕЕ, СРЕДНЕЕ, НЕПОЛНОЕ ВЫСШЕЕ, ВЫСШЕЕ). Ограничение специфицируется специальным выражением при описании данных.

6.Значения некоторого атрибута должны удовлетворять определен­ ному формату.

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

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

Рассмотренные примеры 3—8 соответствуют второму виду ограниче­ ний — ограничений на значения данных.

9.Требуется ограничить обновление данных в заданном отношении таким образом, чтобы для указанного атрибута имело место в каждом кор­ теже некоторое соотношение между старым и новым значениями.

Чтобы специфицировать подобное ограничение, в языках должны быть предусмотрены возможности реализации ссылки на старое и новое значения.

10.Если транзакция А (транзакция — это разовый прогон некоторой процедуры) и транзакция В выполняют изменения одних и тех же данных в

114

4.3. Оптимизация запросов

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

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

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

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

4.3. Оптимизация запросов

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

Например, от пользователя системы поступает запрос вида

К{Ах,АъЛъ,А^)= а^^^,,^^^^55 № х ^2).

Будем считать, что в БД отношение R\{A\, Ai) представлено файлом из десяти тысяч записей, причем записей с ^2 = 11 в этом файле всего, напри­ мер, 15. А отношение RiiA^, А4) представлено файлом из двадцати тысяч записей, причем записей с ^з = 55 в нем всего 50. Если этот поступивший запрос сразу же начать выполнять, не попытавшись его оптимизировать, придется выполнить большой объем работ: для построения декартова про­ изведения придется выполнить 10 000 х 20 000 = 200 000 000 обращений к записям. Селекцию выполним сразу при формировании декартова произве­ дения, поэтому в итоге для реализации запроса придется выполнить 200 000 000 обращений к записям файлов.

Если же исходное выражение преобразовать к виду

то объем требуемой вычислительной работы будет существенно сокращен.

115

4. Методы специальной обработки

Действительно, для вычисления селекции (a^^^,,i?,(^1,^2)) необходи­ мо выполнить десять тысяч обращений к записям. Для вычисления селекции (а^^^55^2(^з?^4)) потребуется выполнить двадцать тысяч обращений. И для окончательного формирования отчета на запрос необходимо построить де­ картово произведение (a^^^,,i?j(^i,^2)) х (^^^3=55^2(^3? ^4))? используя файлы

записей, полученные при вычислении селекции, т.е. придется выполнить еще 15 X 50 = 750 обращений к записям файлов промежуточных результатов. В итоге требуется выполнить лишь 10 000 + 20 000 + 750 = 30 750 обращений, что существенно (в несколько раз) меньше, чем в предыдущем случае.

Эквивалентность выражений реляционной алгебры

Операндами выражений в реляционной алгебре являются переменные отношения /?1,7?2? •••? Rh •••» Rn и константы.

Каждое выражение реляционной алгебры определяет отображение кортежей переменных отношений Л,(/ = 1, TV) в кортежи единственного от­ ношения, которое получается после подстановки кортежей каждого R{i = 1, «) и выполнения всех определяемых выражением вычислений.

Два выражения J\ и J2 реляционной алгебры считаются эквивалент­ ными, т.е. J\ = J2, если они описывают одно и то же отображение. Иными словами, если выполнить подстановки кортежей каждого /?/(/ = 1, «) как в выражение J\, так и в выражение J2, то получим два идентичных результата.

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

1. Закон коммутативности для декартовых произведений:

J\ X J2 =«/2 х-^1- 2. Закон коммутативности для соединений:

Ji®J2 = J2®J\;

J^(S)J2=J2®J\.

FF

3.Закон ассоциативности для декартовых произведений:

(У) X J2) xJ2=J[X (J2 X J3). 4. Закон ассоциативности для соединений:

(Ji ®J2)®J3 = J\ ® (^2®^з);

(У, ®J2)®J3=J\

® (^2 ® Уз).

F\ F2

F\ F2

116

4,3, Оптимизация запросов

5. Комбинация проекций (каскад проекций): П.„.,д„(П,,,^ .„(-/^-П,, , j y ) ,

где множество атрибутов А^ ^2, ••, ^w является подмножеством множества атрибутов В\, J52, ..., Вп^

6.Комбинация селекции (каскад селекции):

7.Перестановка селекции и проекции:

оДП,, ,jy)) = n„ ,,^а,(/)).

8. Перестановка селекции с декартовым произведением:

если F содержит атрибуты, представленные только в выражении J\\

если F содержит атрибуты, представленные только в выражении J2;

G, (У, X J J = (а,^ (J,)) X (а,.^ (У^)),

если F может быть представлено в виде F] л F2, где F] содержит только атрибуты, представленные в Ji, а F2 содержит только атрибуты, представ­ ленные в J2;

9. Перестановка селекции с объединением:

где выражения J\ и J2 имеют одинаковые имена атрибутов (либо задано вза­ имно однозначное соответствие каждого атрибута выражения J\ с единст­ венным атрибутом выражения У2)-

10. Перестановка селекции с разностью: аДУ, - Jj) = Gf{Ji) - аДУз),

где для выражений J] и Jj справедливо замечание п. 9.

11. Перестановка, проекции с декартовым произведением: П.„ .„ (J, X J,) =. (П,, ,„, (J,)) X (П,, ,^ (J,)),

где атрибуты В], ..., В^, С], ..., С входят в состав атрибутов Аи ..., ^;i, причем атрибуты В], ..., 5;,, представлены в выражении J], а атрибуты Ci,..., С;- в

выражении J2.

12. Перестановка проекции с объединением:

п., ,„ (J, и л ) = (п„ ,„ (у,)) и (п,, ^ (У,)),

где для выражений J\ и J2 справедливо замечание п. 9.

Приведенные выше законы используют для оптимизации реляцион­ ных выражений запросов пользователей.

117

4.Методы специальной обработки

4.4.Устранение тупиковых ситуаций при параллельной обработке запросов

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

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

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

Однако как только пользователи получают возможность выполнять опе­ рации изменения одних и тех же данных в базе, то ситуация резко изменяется. Вернемся снова к системе продажи билетов. Например, три различных операто­ ра, находясь в различных транспортных агентствах города, одновременно за­ просили один билет до Санкт-Петербурга на 1 августа в поезде № 2, в купиро­ ванном вагоне. Как в таком случае говорят, будет независимо друг от друга выполнено три процесса, или три транзакции. Под транзакцией в данном случае понимается разовое выполнение некоторой программы.

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

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

118

4.4. Устранение тупиковых ситуаций при параллельной обработке запросов

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

Модели блокировок

Различают простую модель блокировки и модель с блокировками для чтения и записи. В простой модели не вводится различие блокировок для операции чтения или операции записи элемента X. В ней используются две команды:

УСТАНОВИТЬ БЛОКИРОВКУ X

и

СНЯТЬ БЛОКИРОВКУ X

Установление блокировки предотвращает доступ к элементу Хот дру­ гих транзакций как по операции чтения, так и по операции записи до тех пор, пока этот элемент не будет разблокирован.

Модель с блокировками для чтения и записи. В данной модели прово­ дится различие между видами доступа к элементу X.

доступ только для чтения; доступ для чтения и записи.

Соответственно различают два типа команд блокировки.

1. Команда блокировки элемента X по записи. Транзакция, в которой требуется выполнить только чтение элемента X, осуществляет его блоки­ ровку по записи. Блокировка по записи запрещает любой другой транзакции выполнять запись нового значения элемента X, пока он не будет разблоки­ рован. Блокировку элементарно записи могут одновременно устанавливать несколько транзакций (т.е. допускается параллельная работа по чтению данных для нескольких транзакций).

2. Команда блокировки элементарно чтению и записи. Эта команда соответствует команде блокировки в простой модели, т.е. предотвращается доступ к элементу X от других транзакций как по чтению, так и по записи. Если некоторая транзакция установила блокировку элемента X по чтению и записи, то никакая другая транзакция не сможет его заблокировать ни по записи, ни по чтению.

Как блокировка по чтению, так и блокировка по чтению и записи, снимаются одной командой:

СНЯТЬ БЛОКИРОВКУ X

В модели допускается ситуация, когда транзакция может вначале ус­ танавливать блокировку элемента X по чтению, а затем блокировку элемен-

119