Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по SQL.docx
Скачиваний:
76
Добавлен:
09.04.2015
Размер:
140.9 Кб
Скачать

Создание представления в окне в Query Editor (Редактор запросов).

Создайте новое представление. Для этого в окне SQL Server Management Studio выберите в меню Создать запрос и в окне редактора введите следующий текст:

USE Postavki;

GO

CREATE VIEW PostDet.SUP_P

AS SELECT S, STATUS, CITY

FROM PostDet.tblS WHERE STATUS > 10;

Нажмите Выполнить. Представление будет создано.

Предоставление привилегий осуществляется с помощью оператора GRANT. Предоставьте привилегии пользователю Fred.

USE Postavki;

GO

GRANT SELECT (S,STATUS)

ON PostDet.SUP_P

TO [FS-64C67299CCAR\Fred];

Переключитесь на учетную запись Fred, войдите на сервер и выполните следующие запросы:

1.SELECT STATUS FROM PostDet.SUP_P;

2.SELECT CITY FROM PostDet.SUP_P;

Оцените полученные результаты.

Отмена ранее предоставленных привилегий осуществляется с помощью оператора REVOKE.

Самостоятельно создайте запрос к созданному ранее представлению.

Управление доступом к хранимым процедурам и определяемым пользователем функциям.

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

Управление безопасностью для хранимых процедур.

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

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

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

Войдите на сервер с учетной записью администратора. В окне создания запросов введите код:

USE Postavki;

GO

CREATE PROCEDURE PostDet.SUP_STAT @Rstatus INT

AS

BEGIN

SELECT * FROM PostDet.tblS WHERE STATUS > @Rstatus

END

Выполните и сохраните процедуру.

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

USE Postavki;

GO

GRANT EXECUTE ON PostDet.SUP_STAT

TO[FS-64C67299CCAR\Fred];

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

Переключитесь на учетную запись Fred .

Протестируйте созданную хранимую процедуру. Для этого в окне создания запроса введите следующий текст: PostDet. SUP_STAT 10;

Нажмите Выполнить и оцените результат.

Другой вариант вызова этой процедуры:

USE Postavki;

GO

DECLARE @Zstatus INT

SET @Zstatus = 20

EXEC PostDet. SUP_STAT @Zstatus;

Для удаления хранимой процедуры используется команда DROP PROCEDURE.

DROP PROCEDURE name.

Для отмены предоставленного ранее разрешения на выполнение хранимой процедуры служит оператор REVOKE. Чтобы запретить выполнение хранимой процедуры пользователю используют оператор DENY.

Самостоятельно отмените разрешение Fred на выполнение процедуры SUP_STAT.

Управление безопасностью определяемых пользователем функций.

Существуют два основных вида определяемых пользователем функций: функции, возвращающие скалярное значение, и функции, возвращающие табличное значение. В зависимости от типа определяемой пользователем функции, пользователю необходимо предоставить одно из двух разрешений: EXECUTE или SELECT.

Выполнение функции, возвращающей переменную типа Table.

Создайте Функцию PostDet.KLAV, которая возвращает все значения поставок поставщика S1 из таблицы PostDet.tblSP.

В окне создания запросов введите код:

USE Postavki;

GO

CREATE FUNCTION PostDet.KLAV

(

@NewPost CHAR(10)

)

RETURNS TABLE

AS

RETURN

(

SELECT DISTINCT QTY As NewQTY FROM PostDet.tblSP

WHERE PostDet.tblSP.S = @NewPost

);

Выполните функцию. Сохраните код выполненной функции.

Разрешение для функции можно предоставить тем же способом, каким предоставляется разрешение SELECT для таблиц.

--Разрешение на выполнение функции PostDet.Klav.

USE Postavki;

GO

GRANT SELECT ON PostDet.Klav TO Fred;

Протестируйте функцию. В окне запроса введите код:

SELECT * FROM PostDet.Klav(‘S1’);

В результате получите все значения поставок поставщика ‘S1’.

Следующая процедура PostDet.QTYSUM из этих значений будет определять максимальное значение поставок.

USE Postavki;

GO

CREATE PROCEDURE PostDet.QTYSUM

AS

DECLARE @NumPost char(10), @a char(7)

SET @NumPost = 'S1'

SET @a = (SELECT MAX(NewQTY) FROM PostDet.KLAV ( @NumPost))

SELECT @a

Выполните и сохраните созданную процедуру .

Предоставьте пользователю Fred разрешение на выполнение процедуры PostDet.QTYSUM .

USE Postavki;

GO

GRANT EXECUTE ON. PostDet.QTYSUM

TO[FS-64C67299CCAR\Fred];

Переключитесь на учетную запись Fred и войдите на сервер.

Выполните процедуру. Для этого в окне редактора введите код: PostDet.QTYSUM;

Вы получите максимальное значение поставок поставщика ‘S1’.

Использование триггеров.

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

Триггеры DML прикреплены к определенной таблице или представлению и выполняются в ответ на инструкции INSERT, UPDATE или DELETE. Они используются для поддержания целостности данных, для каскадных обновлений или для осуществления бизнес-правил. Триггеры DDL прикреплены к действию, которое происходит в базе данных или на сервере, и применяются к инструкциям таким, как например, CREATE, ALTER, DROP. Они, как правило, создаются для обеспечения безопасности системы.

Переключитесь на учетную запись администратора и войдите в SQL Server. Создайте триггер, запрещающий вставку записи в таблицу tblS.

В окне создания запросов введите код:

USE Postavki

GO

CREATE TRIGGER PostDet. no_insert ON PostDet.tblS

For INSERT

AS

ROLLBACK;

Сохраните триггер. Откройте таблицу PostDet.tblS и вставьте запись. Запись не добавиться. Получите сообщение об ошибке. Нажмите клавишу Esc. Создайте триггер DDL, который будет срабатывать каждый раз, когда будет выполняться инструкция DROP_TABLE.

USE Postavki;

GO

Соседние файлы в предмете Базы данных