русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2013-12-23; просмотров: 999; Нарушение авторских прав


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

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

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

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

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

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

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

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

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

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

 


Представления – статическое определение динамической таблицы, созданное на основе запроса на выборку из таблиц, реально хранящихся в базе данных или из других представлений. С технической точки зрения, представления это хранимое в базе данных определение инструкции 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 фамилия продавца

 



<== предыдущая лекция | следующая лекция ==>
Использование оператора EXISTS. | Переменные.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.