русс | укр

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

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

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

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


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

Триггеры.


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


Вызов хранимых процедур.

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

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

create procedure select_proc (fam char(20))

returns (num int, summa int) as

begin

for select p. номер сделки, количество * цена

from ( продажа р, продавец s)

where (p.номер продавца=s.Номер продавца)

and (s. Имя = :fam )

into :num, :summa

do suspend

end

Вызываются такие процедуры select <поля > from <имя процедуры> [(<передаваемые параметры>)]

Select * from select_proc (‘Иванов’)

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

create procedure exec_proc (amount : int )

as

begin

update продавец s

set процент = процент+0,01

where :amount<(select count(*) from продажи

where номер продавца=s.номер продавца)

end;

execute procedure exec_proc (2)

 

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

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

Синтаксис триггера:

Create trigger <имя триггера> for <имя таблицы>

[active| inactive] {before| after} {delete| insert | update}



[position <номер>]

<декларация переменных>

As

<текст триггера>

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

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

Сначала создадим таблицу хранящую изменения зарплаты:

Create table salary_history(

empNo int,

change_date date,

old_salary int)

create trigger save_salary_change

for Empl

after update

as begin

if (old.salary <> new.salary) then

insert into salary_history

values (old.EmpNo,

‘now’, old.salary,

(new.salary – old.salary) * 100 / old.salary)

В IB имеются объекты – генераторы, которые при обращении к ним gen_id возвращают int.

 

Создаются такие объекты следующим образом:

Create generator <имя генератора>

Для изменения следующего значения генератора используют команду:

Set generator <имя генератора> to <new value>

Предположим, в таблице имеются продавцы с номерами 1,2,5. Если мы выполним

create generator g_num

Set generator to 6

Create trigger ins_sal foк продавец

Before insert

As begin

New.номер продавца = gen.id(g_num,1)

Тогда, если мы выполним:

Insert into продавец (имя, процент)

Values(‘шпак’, 0,03)

Безопасность данных. Для того, чтобы СУБД могла обеспечивать безопасность, она должна иметь:

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

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

- механизм учета правил безопасности при трансляции запросов. В этом случае СУБД должна разбирать запросы в форме «запрашиваемая операция – запрашиваемый объект – запрашивающий пользователь». В общем виде можно выделить избирательные и мандатные модели доступа. В избирательных моделях выделяется ролевая модель доступа, она широко распространена.

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

1) пользователь имеет доступ к объекту, только если уровень допуска пользователя больше или равен уровню классификации объекта,

2) пользователь может модифицировать объект, только если уровень допуска пользователя равен уровню классификации объекта. Это необходимо для предотвращения записи информации на более низкий уровень.

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

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

1. Имя – правило будет записано в системе под этим именем, и это имя может появиться в сообщении системы в результате попытки нарушения этого правила.

2. Список привилегий – удаление, вставка, модификация, просмотр, привилегия на передачу полномочий.

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

4. Список пользователей, для которых создается правило.

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

В стандарте SQL создание правил безопасности происходит так:

Grant

{<список привилегий>| all on <имя таблицы>|<имя представления>}|{execute on procedure <имя процедуры>} to <список пользователей>| public [with grant option]

Привилегии – select, delete, update, insert.

Присутствие конструкции [with grant option] позволяет пользователю, получившему указанные права, самому передавать их другим пользователям.

Создатель объекта (таблицы, представления, хранимой процедуры) имеет все права на него. Для остальных пользователей действует правило «что не разрешено, то запрещено», то есть пользователь может производить действия только с объектами, на которые он явно получил привилегии. Исключение – суперпользователь SYSDBA (пароль - masterkey), он имеет все права на все объекты БД.

Привилегии на данные можно отменить командой revoke.

Revoke

{<список привилегий>| all on <имя таблицы>|<имя представления>}|{execute on procedure <имя процедуры>} from <список пользователей>| public




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


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


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

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

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


 


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

 
 

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

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