Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД лекции.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
846 Кб
Скачать
☆

Безопасность и целостность бд.

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

Целостность – поддержание согласованности и истинности данных, то есть поддержание данных в непротиворечивом состоянии.

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

Можно выделить 2 уровня безопасности и целостности:

- 1 уровень – программный. Подразумевает наличие кода в программе, не позволяющего вносить некорректные данные или запрещающего доступ к данным определенным пользователям.

- 2 уровень – уровень СУБД. Реализация правил безопасности и целостности на уровне СУБД.

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

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

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

Представления (view).

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

Отметим, что представление не создает копию данных базовых таблиц. При обращении к нему происходит выполнение соответствующего запроса на существующих в момент обращения данных. Синтаксис:

Create view <имя представления> [(атрибут 1, [атрибут 2…])] – список имен полей представления

As <оператор select> [with check option]

Create view dep21 (name) as select name from empl where depno=21

Преимущества использования представлений:

- эффективность (по сравнению с многократным выполнением запроса) – представление компилируется и оптимизируется 1 раз: при создании или при первом выполнении, затем при обращении план выполнения запросов уже не вычисляется.

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

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

Бывают два вида представлений: только для чтения и обновляемые представления.

Требования обновляемости представлений:

  1. Представление должно определять подмножества только одной таблицы или другого модифицируемого представления.

  2. Представление должно включать первичный ключ таблицы.

  3. Все исключаемые колонки должны допускать null-значение.

  4. Представление не должно использовать функций агрегирования и разделы group by и having

  5. Представление не должно использовать подзапросы.

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

Создать представление о служащих, у которых невысокая зарплата:

Create view empl1 as select * from empl where salary<1000

Вставим запись:

Insert into empl1 values (12,’Федоров’,’менеджер’, 1200, 21)

Новая запись будет вставлена в основную таблицу, но для представления empl1 она окажется невидимой. Чтобы запретить включение исчезающих записей, в конце определения представления пишут:

Create view empl1 as select * from empl where salary<1000 with check option

В данном случае при вставлении новой записи возникнет ошибка.

С помощью представлений можно также удалять строки из базовых таблиц, при этом через представление нельзя удалить строки, не удовлетворяющие критерию where select-инструкции представления.

На модификацию строк таблиц через представления действуют такие же ограничения, что и на удаление, и на вставку.

Пример: пусть имеется таблица «Факультет» <код факультета, название факультета> и связанная с ней таблица «Специальность» <код специальности, название специальности, код факультета>. Построим представление, выводящее информацию о специальности и названии факультета, которому принадлежит специальность:

Create view spec

As select s.spec_code, s.spec_name, d.dep_name

From speciality s, department d

Where s.dep_code=d.dep_code

Таким образом, отсекаем ненужную информацию и упрощаем запросы:

Select * from spec

Знание структуры базы данных становится не необходимым.

Пусть имеются таблицы – Продавец <номер продавца, фамилия продавца, процент с продажи>, Продажа <номер сделки, номер продавца, проданное количество, стоимость единицы товара>. Создадим представление, выводящее фамилию и общий доход продавцов:

Create view income (fio, summ)

As select фамилия продавца, sum ((количество*стоимость единицы товара)*процент с продажи)

From продавец t1, продажа t2

Where t1. номер продавца = t2. номер продавца

Group by фамилия продавца