
- •Работа с базами данных в субд ms sql Server 2008r
- •1 Описание работы и задания 7
- •1 Описание работы и задания 25
- •1 Описание работы и задания 39
- •1 Описание работы и задания 62
- •1 Описание работы и задания 73
- •Введение в Microsoft Visual FoxPro Лабораторная работа 1.1 Создание баз данных в субд ms Visual FoxPro
- •1 Описание работы и задания
- •Определить условия на значения и сообщения об ошибках некоторых полей.
- •2 Выполнение работы
- •2.1 Обращение к среде sql Server Management Studio
- •2.2 Знакомство с языком Transact-sql
- •2.2.1 Возможности t-sql и особенности его использования
- •2.2.2 Создание базы данных
- •2.2.3 Создание таблиц
- •2.2.4 Манипулирование данными с помощью команд t-sql
- •2.3 Работа с обозревателем объектов
- •2.3.1 Создание базы данных
- •2.3.2 Создание таблиц
- •2.3.3 Занесение данных в созданную таблицу
- •2.3.4 Создание объектов с помощью диаграмм данных и поддержка целостности данных
- •Лабораторная работа 2.2 Создание запросов в субд ms sql Server 2008r
- •1 Описание работы и задания
- •2 Выполнение работы
- •2.1 Оператор select
- •2.1.1 Простая выборка данных
- •2.1.2 Аналитическая выборка данных
- •2.1.3 Условие отбора where
- •2.1.4 Группировка записей group by
- •2.1.5 Условие на группируемые поля having
- •2.1.6 Использование функций преобразования различных типов данных
- •2.2 Подзапросы
- •2.3 Выборка данных из нескольких таблиц
- •2.3.1 Внутреннее соединение
- •2.3.2 Внешнее соединение
- •2.3.3 Перекрестные соединения
- •2.2.4 Объединение нескольких наборов результатов
- •Лабораторная работа 2.3 Хранимые процедуры и триггеры
- •1 Описание работы и задания
- •2 Выполнение работы
- •2.1 Хранимые процедуры
- •2.1.1 Переменные. Задание значений переменных
- •2.1.2 Использование переменных в запросах sql
- •2.1.3 Создание хранимых процедур
- •2.1.3.1 Создание хранимой процедуры без параметров
- •2.1.3.2 Создание и изменение хранимой процедуры с входными и выходными параметрами
- •2.1.3 Удаление хранимых процедур
- •2.2 Триггеры
- •2.3 Списки встроенных функции для работы с данными типа дата и строковыми данными
- •Лабораторная работа 2.4 Курсоры
- •1 Описание работы и задания
- •2 Выполнение работы
- •2.1 Понятие курсора
- •2.2 Реализация курсоров в среде ms sql Server
- •2.3 Управление курсором в среде ms sql Server
- •2.3.1 Объявление курсора
- •2.3.2 Открытие курсора
- •2.3.3 Выборка данных из курсора
- •2.3.4 Изменение и удаление данных
- •2.3.5 Закрытие курсора
- •2.3.6 Освобождение курсора
- •2.2. Безопасность баз данных и привилегии
- •2.3. Основные методы защиты данных в ms sql Server 2008 r2
- •Список использованных источников
- •Список предметных областей
- •Типы данных sql 2008r
2.3.5 Закрытие курсора
CLOSE {имя_курсора | @имя_переменной_курсора}
После закрытия курсор становится недоступным для пользователей программы. При закрытии снимаются все блокировки, установленные в процессе его работы. Закрытие может применяться только к открытым курсорам. Закрытый, но не освобожденный курсор может быть повторно открыт. Не допускается закрывать неоткрытый курсор.
2.3.6 Освобождение курсора
Закрытие курсора необязательно освобождает ассоциированную с ним память. В некоторых реализациях нужно явным образом освободить ее с помощью оператора DEALLOCATE. После освобождения курсора освобождается и память, при этом становится возможным повторное использование имени курсора.
DEALLOCATE { имя_курсора |
@имя_переменной_курсора }
Для контроля достижения конца курсора рекомендуется применять функцию: @@FETCH_STATUS
Функция @@FETCH_STATUS возвращает:
0, если выборка завершилась успешно;
-1, если выборка завершилась неудачно вследствие попытки выборки строки, находящейся за пределами курсора;
-2, если выборка завершилась неудачно вследствие попытки обращения к удаленной или измененной строке.
DECLARE abc CURSOR SCROLL FOR
SELECT * FROM Клиент
Пример 1. Объявление курсора.
DECLARE @MyCursor CURSOR
SET @MyCursor=CURSOR LOCAL SCROLL FOR
SELECT * FROM Клиент
Пример 2. Использование переменной для объявления курсора.
DECLARE abc CURSOR GLOBAL SCROLL FOR
SELECT * FROM Клиент
OPEN abc
Пример 3. Объявление и открытие курсора.
DECLARE @MyCursor CURSOR
SET @MyCursor=abc
Пример 4. Разработать курсор для вывода списка фирм и клиентов из Москвы.
DECLARE @firm VARCHAR(50),
@fam VARCHAR(50),
@message VARCHAR(80)
PRINT ' Список клиентов'
DECLARE klient_cursor CURSOR LOCAL FOR
SELECT Фирма, Фамилия
FROM Клиент
WHERE Город='Москва'
ORDER BY Фирма, Фамилия
OPEN klient_cursor
FETCH NEXT FROM klient_cursor INTO @firm, @fam
WHILE @@FETCH_STATUS=0
BEGIN
SELECT @message='Клиент '+@fam+
' Фирма '+ @firm
PRINT @message
-- переход к следующему клиенту--
FETCH NEXT FROM klient_cursor
INTO @firm, @fam
END
CLOSE klient_cursor
DEALLOCATE klient_cursor
Пример 5. Разработать курсор для вывода списка приобретенных клиентами из Москвы товаров и их общей стоимости. В один курсор заносятся все московские клиенты, затем для каждой строки курсора, т.е. для каждого клиента, определяется и распечатывается другой курсор – его покупки. Подсчитывается общая стоимость покупок клиента.
DECLARE @id_kl INT,
@firm VARCHAR(50),
@fam VARCHAR(50),
@message VARCHAR(80),
@nam VARCHAR(50),
@d DATETIME,
@p INT,
@s INT
SET @s=0
PRINT ' Список покупок'
DECLARE klient_cursor CURSOR LOCAL FOR
SELECT КодКлиента, Фирма, Фамилия
FROM Клиент
WHERE Город='Москва'
ORDER BY Фирма, Фамилия
OPEN klient_cursor
FETCH NEXT FROM klient_cursor
INTO @id_kl, @firm, @fam
WHILE @@FETCH_STATUS=0
BEGIN
SELECT @message='Клиент '+@fam+
' Фирма '+ @firm
PRINT @message
SELECT @message='Наименование товара Дата
покупки Стоимость'
PRINT @message
DECLARE tovar_cursor CURSOR FOR
SELECT Товар.Название, Сделка.Дата,
Товар.Цена*Сделка.Количество AS
Стоимость
FROM Товар INNER JOIN Сделка ON Товар.
КодТовара=Сделка.КодТовара
WHERE Сделка.КодКлиента=@id_kl
OPEN tovar_cursor
FETCH NEXT FROM tovar_cursor
INTO @nam, @d, @p
IF @@FETCH_STATUS<>0
PRINT ' Нет покупок'
WHILE @@FETCH_STATUS=0
BEGIN
SELECT @message=' '+@nam+' '+
CAST(@d AS CHAR(12))+' '+
CAST(@p AS CHAR(6))
PRINT @message
SET @s=@s+@p
FETCH NEXT FROM tovar_cursor
INTO @nam, @d, @p
END
CLOSE tovar_cursor
DEALLOCATE tovar_cursor
SELECT @message='Общая стоимость '+
CAST(@s AS CHAR(6))
PRINT @message
-- переход к следующему клиенту--
FETCH NEXT FROM klient_cursor
INTO @id_kl, @firm, @fam
END
CLOSE klient_cursor
DEALLOCATE klient_cursor
Пример 6. Разработать прокручиваемый курсор для клиентов из Москвы. Если номер телефона начинается на 1, удалить клиента с таким номером и в первой записи курсора заменить первую цифру в номере телефона на 4.
DECLARE @firm VARCHAR(50),
@fam VARCHAR(50),
@tel VARCHAR(8),
@message VARCHAR(80)
PRINT ' Список клиентов'
DECLARE klient_cursor CURSOR GLOBAL SCROLL
KEYSET FOR
SELECT Фирма, Фамилия, Телефон
FROM Клиент
WHERE Город='Москва'
ORDER BY Фирма, Фамилия
FOR UPDATE
OPEN klient_cursor
FETCH NEXT FROM klient_cursor
INTO @firm, @fam, @tel
WHILE @@FETCH_STATUS=0
BEGIN
SELECT @message='Клиент '+@fam+
' Фирма '+@firm ' Телефон '+ @tel
PRINT @message
-- если номер телефона начинается на 1,
-- удалить клиента с таким номером
IF @tel LIKE ‘1%’
DELETE Клиент
WHERE CURRENT OF klient_cursor
ELSE
-- переход к следующему клиенту
FETCH NEXT FROM klient_cursor
INTO @firm, @fam, @tel
END
FETCH ABSOLUTE 1 FROM klient_cursor
INTO @firm, @fam, @tel
-- в первой записи заменить первую цифру в
-- номере телефона на 4
UPDATE Клиент SET Телефон=’4’ +
RIGHT(@tel,LEN(@tel)-1))
WHERE CURRENT OF klient_cursor
SELECT @message='Клиент '+@fam+' Фирма '+
@firm ' Телефон '+ @tel
PRINT @message
CLOSE klient_cursor
DEALLOCATE klient_cursor
Пример 7. Использование курсора как выходного параметра процедуры. Процедура возвращает набор данных – список товаров.
CREATE PROC my_proc
@cur CURSOR VARYING OUTPUT
AS
SET @cur=CURSOR FORWARD_ONLY STATIC FOR
SELECT Название FROM Товар
OPEN @cur
Пример 13.8. Использование курсора как выходного параметра процедуры.
Вызов процедуры и вывод на печать данных из выходного курсора осуществляется следующим образом:
DECLARE @my_cur CURSOR
DECLARE @n VARCHAR(20)
EXEC my_proc @cur=@my_cur OUTPUT
FETCH NEXT FROM @my_cur INTO @n
SELECT @n
WHILE (@@FETCH_STATUS=0)
BEGIN
FETCH NEXT FROM @my_cur INTO @n
SELECT @n
END
CLOSE @my_cur
DEALLOCATE @my_cur
Лабораторная работа 2.5 Система безопасности MS SQL Server 2008 R2
1 Описание работы и задания
Цель работы:
Задания:
Вопросы для самоконтроля:
2 Выполнение работы
2.1. Управление доступом. Общие сведения
Авторизация и аутентификация. Аутентификация — это процесс проверки права пользователя на доступ к тому или иному ресурсу. Чаще всего аутентификация осуществляется с помощью ввода имени и пароля.
MS SQL Server 2008 R2 поддерживает два режима аутентификации: с помощью Windows и с помощью SQL Server. Первый режим позволяет реализовать решение, основанное на однократной регистрации пользователя и едином пароле при доступе к различным приложениям (Single SignOn solution, SSO). Подобное решение упрощает работу пользователей, избавляя их от необходимости запоминания множества паролей и тем самым снижая риск их небезопасного хранения (вспомним стикеры с паролями, наклеенные на мониторы). Кроме того, данный режим позволяет использовать средства безопасности, предоставляемые операционной системой, такие как применение групповых и доменных политик безопасности, правил формирования и смены паролей, блокировка учетных записей, применение защищенных протоколов аутентификации с помощью шифрования паролей (Kerberos или NTLM).
Аутентификация с помощью SQL Server предназначена главным образом для клиентских приложений, функционирующих на платформах, отличных от Windows. Этот способ считается менее безопасным, но в MS SQL Server 2008 R2 он поддерживает шифрование всех сообщений, которыми обмениваются клиент и сервер, в том числе с помощью сертификатов, сгенерированных сервером. Шифрование также повышает надежность этого способа аутентификации. Для учетной записи SQL Server можно указать такой параметр, как необходимость сменить пароль при первом соединении с сервером (рис. 1).
Отметим такую мелочь, как обязательное требование непустого пароля пользователя sa – как ни странно, пустой пароль данной учетной записи является весьма распространенным проявлением беспечности администраторов баз данных (и самой любимой лазейкой для похитителей корпоративных данных).
Схемы, не имеющие отношения к пользователям. Вот уже не первый десяток лет принцип распределения прав доступа к объектам баз данных в большинстве серверных СУБД основан на наличии у каждого объекта базы данных пользователя-владельца, который может предоставлять другим пользователям права доступа к объектам базы данных. При этом набор объектов, принадлежащих одному и тому же пользователю, называется схемой. Данный способ владения объектами создавал определенные неудобства при сопровождении приложений, использующих базы данных. Так, при увольнении сотрудника, создавшего объекты, используемые многими пользователями, и удалении соответствующей учетной записи приходилось вносить изменения в серверный код (а нередко и в код клиентского приложения). Понимание возможности возникновения этих проблем привело к распространению небезопасных, но простых в применении способов управления учетными записями пользователей. Вплоть до хранения их имен и паролей в обычных таблицах, что резко повышало угрозу несанкционированного доступа к данным и приложениям.
В MS SQL Server 2008 R2 концепция ролей расширена: эта СУБД позволяет полностью отделить пользователя от схем и объектов базы данных. Теперь объекты базы данных принадлежат не пользователю, а схеме, не имеющей никакого отношения ни к каким учетным записям и тем более к административным привилегиям. Таким образом, схема становится механизмом группировки объектов, упрощающим предоставление пользователям прав на доступ к объектам (рис. 2).
Рис. 2. Установка прав для схем данных
Роли. Для упрощения управления правами доступа в большинстве серверных СУБД применяется механизм ролей – наборов прав доступа к объектам базы данных, присваиваемых некоторой совокупности пользователей. При использовании ролей управление распределением прав доступа к объектам между пользователями, выполняющими одинаковые функции и применяющими одни и те же приложения, существенно упрощается: создание роли и однократное назначение ей соответствующих прав осуществляется намного быстрее, нежели определение прав доступа каждого пользователя к каждому объекту. MS SQL Server 2008 R2 позволяет создавать так называемые вложенные роли, то есть присваивать одной роли другую со всеми ее правами. Это упрощает управление не только правами пользователей, но и самими ролями, создавая, к примеру, сходные между собой группы ролей.
MS SQL Server 2008 R2 также поддерживает так называемые роли для приложений (application roles), которые могут использоваться для ограничения доступа к объектам базы данных в тех случаях, когда пользователи обращаются к данным с помощью конкретных приложений. В отличие от обычных ролей, роли для приложений, как правило, неактивны и не могут быть присвоены пользователям. Их применение оказывается удобным в том случае, когда требования безопасности едины для всех пользователей, при этом не требуется аудит или иная регистрация деятельности конкретных пользователей в базе данных.
Применение схем и ролей. Общие принципы. Одним из обязательных этапов проектирования баз данных должно быть детальное определение способов доступа к объектам базы данных. В частности, на этом этапе необходимо определить, каким образом использовать схемы для группировки объектов базы данных с точки зрения доступа к ним, какие роли создать, определить возможные группы пользователей и роли, которые следует им присвоить. Кроме того, на этом же этапе важно принять решение о том, как будут использоваться представления и хранимые процедуры для обеспечения безопасного доступа к данным (например, для ограничения непосредственного доступа к таблицам).
В последнее время настоятельно рекомендуется применять роли во всех решениях (как было сказано выше, это заметно снижает затраты на процесс управления правами доступа и внесение в них изменений), а в случае наличия пользователей, имеющих частично совпадающие наборы прав доступа, рекомендуется применять вложенные роли. Для определения прав доступа и правил вложенности ролей следует разделить пользователей на группы с разными правами доступа и понять, можно ли сформулировать правила вложенности групп, а затем отразить эти сведения в проектируемых ролях.
Нужно также проанализировать требования к правам доступа, предъявляемые клиентскими приложениями, и учесть эти требования при проектировании ролей и создании схем. Не стоит при этом забывать и о том, что списки пользователей и ролей следует не только единожды создать, но и постоянно актуализировать. Помимо вопросов управления доступом в клиентских приложениях, рекомендуется уделить внимание и управлению доступом в различных службах SQL Server.
Более подробно о политике безопасности в Microsoft SQL Server 2008 R2 можно ознакомиться по ссылке http://msdn.microsoft.com/ru-ru/library/bb283235.aspx.