Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник(Семенова).doc
Скачиваний:
13
Добавлен:
26.08.2019
Размер:
9.15 Mб
Скачать

6.2. Особенности реализации защиты данных при разработке ис в рамках концепции баз данных

Как известно, существует множество разнообразных систем управления базами данных (СУБД), позволяющих разрабатывать информационные системы в рамках концепции баз данных. Большинство из них ориентированы на реляционную модель данных.

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

Следует заметить, что во многих современных СУБД существуют достаточно широкие возможности для неквалифицированного пользователя задать необходимые ограничения целостности. Так, если пользоваться встроенными возможностями СУБД ACCESS, то задать такое ограничение целостности, как «Значение первичного ключа должно быть уникальным», не представляет никакого труда. При описании структуры таблицы необходимо лишь сделать соответствующую пометку.

Приведем конкретный пример.

Пусть в режиме конструктора структура таблицы «студент» определена таким образом, как показано на рис. . Очевидно, что в качестве первичного ключа целесообразно выбрать поле «№ студенческого билета». Для этого достаточно установить курсор в крайний левый столбец в соответствующую строку, а далее воспользоваться одним из способов:

  • е сли на панели инструментов имеется пиктограмма «ключевое поле» ( ), то достаточно активизировать ее, нажав левую клавишу манипулятора «мышь»;

  • можно воспользоваться меню (Правка  Ключевое поле);

  • можно нажать правую клавишу манипулятора «мышь» и в появившемся меню выбрать соответствующий пункт (рис. 8).

Р исунок 8. Определение первичного ключа для таблицы «Студент»

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

Работая в режиме ввода данных, при попытке сохранить таблицу, в которой имеются совпадающие значения в поле «№_студенческого билета» система выдаст соответствующее предупреждение (рис. 9).

Рис.9. Системное предупреждение о некорректном вводе

Значений первичного ключа

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

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

USE baza1 IN A

flag=.F.

vrem_per_st_billet=’ ‘

@ 2,2 SAY «Введите номер студенческого билета» GET vrem_per_st_billet

READ

GO TOP

DO WHILE .NOT.EOF().AND.flag=.F.

IF vrem_per_st_billet=a.billet

flag=.t.

ENDIF

SKIP

ENDDO

IF flag=.T.

@ 3,2 SAY «Ввод некорректен. Такой номер студенческого билета уже есть в базе!»

ENDIF

В приведенном фрагменте проверка основана на том, что организуется цикл (DO WHILE .NOT.EOF().AND.flag=.F.), обеспечивающий переход от записи к записи (в теле цикла – SKIP) до тех пор, пока не конец файла и логическая переменная flag имеет значение «ложь», а также проверку (IF vrem_per_st_billet=a.billet) равно или нет значение временной переменной значению поля billet в текущей записи.

Если в какой-либо записи значение поля billet окажется равным временной переменной, то логической переменной будет присвоено значение «истина» (flag=.t.). Дальнейшая проверка (IF flag=.T.) позволяет определить, в каком случае произошло окончание работы цикла: в случае, когда был обнаружен признак конца файла (переменная flag не изменилась) или была найдена запись, поле которой равно введенной с клавиатуры величине. Из приведенного фрагмента следует, что поле billet является строковым, а его длина – 8 символов.

Следует обратить внимание на то, что для ввода значения временной переменной vrem_per_st_billet используется команда редактирования (@ … SAY … GET … READ), в этой связи необходима предварительная инициализация указанной переменной. При этом важно, чтобы начальное значение этой переменной полностью по типу и по длине строго совпадало с соответствующим полем базы, в котором будет храниться это данное.

Когда некоторое поле объявляется в качестве первичного ключа, оно по умолчанию не может быть пустым. Однако запрет на неопределенное (пустое) значение может быть наложен и на любое другое поле. Так, в частности для таблиц, где содержатся личностные данные целесообразно, в частности, для полей «Фамилия», «Имя», «Отчество» задать соответствующее ограничение целостности. Аналогичным образом следует поступать, когда в таблице присутствует поле, значением которого является наименование описываемого объекта, если данное поле не объявлено в качестве первичного ключа.

В СУБД ACCESS это можно сделать, установив для параметра «Обязательное поле» значение «Да». На рис. 10 показано, что поле «Дата рождения» является обязательным.

Рис. 10. Установка запрета для поля «Дата рождения»

Null-значения (неопределенного значения)

При вводе данных и попытке перехода к другой записи, в случае, если в текущей записи поле «Дата рождения» не будет заполнено (рис. 11), на экране появится соответствующее системное предупреждение (рис. 12).

Рис.11. Состояние таблицы «Студент»

в момент ввода данных активной записи ( )

Рис. 12. Системное сообщение о необходимости обязательного

заполнения поля «Дата рождения» в таблице «Студент»

Точно такое сообщение будет выдано и при попытке выйти из режима заполнения данных таблицы «Студент». При этом нажатие кнопки «ОК» приведет к появлению другого системного предупреждения (рис. 13).

Рис.13. Системное предупреждение при выходе из режима ввода и

редактирования в условиях наличия в таблице данных,

не соответствующих ограничениям целостности

Реализация такого ограничения целостности на входном языке СУБД FoxPro также достаточно проста.

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

Рис.14. Системное предупреждение при вводе данных,