Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Хомоненко А.Д., Цыганков В.М., Мальцев М.Г. - Базы данных. Учебник для высших учебных заведений (6-е изд.) - 2009

.pdf
Скачиваний:
4972
Добавлен:
14.05.2016
Размер:
14.64 Mб
Скачать

13. Microsoft SQL Server 2000

503

Можно указать явно для SQL Server, какой индекс следует использовать путем задания его в директиве FROM. С этой целью в операторе SELECT используется директива INDEX. Упрощенно формат оператора выборки данных можно представить следующим образом:

SELECT...

FROM имя таблицы (INDEX = n)

Здесь ключевое слово INDEX предписывает, чтобы SQL Server использовал индекс, определяемый значением п. Если значение п равно нулю, то выполняется сканирование таблицы. При единичном значении п используется кластерный индекс, если он имеется в таблице. Остальные значения п определяют порядковые номера индексов, которые следует использовать.

В SQL Server имеется два способа отображения информации об индексах: с помощью диспетчера индексов Index Manager программы SQL Server Enterprise Manager, а также с помощью системных хранимых процедур sp_helpindex или sp statistics.

Индексы можно удалять двумя способами: с помощью программы SQL Server Enterprise Manager и с помощью оператора DROP INDEX языка Transact SQL. Для удаления индекса с помощью программы SQL Server Enterprise Manager выполняется следующее:

1.Запуск программы из группы Microsoft SQL Server.

2.Выбор сервера, базы данных и таблицы.

3.Выполнение команды меню Action | All tasks | Manage Indexes (Дей-

ствие | Все задачи | Работа с индексами).

4.В открывшемся диалоговом окне Manage Indexes (Работа с индекса-

ми) выбор удаляемого индекса и нажатие кнопки Delete (Удалить).

5.В очередном окне подтверждение необходимости удаления индекса или отказ.

ВSQL Server ключи служат для поддержания целостности данных в таб-

лицах баз данных (см. подразделы 3.1-3.2). Напомним, что первичный ключ представляет собой уникальное поле или набор полей, однозначно определяющий строки таблицы базы данных. Внешний ключ представляет собой поле или набор полей таблицы, который соответствует первичному ключу другой таблицы, связанной с исходной таблицей. Область значений для внешнего ключа является подмножеством значений соответствующего первичного ключа.

В SQL Server первичные и внешние ключи можно создать следующими тремя способами: с помощью программы SQL Server Enterprise Manager, с помощью оператора ALTER TABLE...ADD CONSTRAINT языка

504

Часть 3. Современные

СУБД и их

применение

Transact SQL и с помощью параметра PRIMARY/FOREIGN KEY оператора CREATE TABLE.

Для добавления первичного ключа с помощью программы SQL Server Enterprise Manager выполняется следующее:

1.Запуск программы из группы Microsoft SQL Server.

2.Выбор сервера, базы данных и таблицы.

3.Выполнение команды Action | Design Table (Действие | Конструктор

таблиц).

4.Выделение столбцов, определяемых в качестве первичных индексов, и выполнение команды контекстного меню таблицы Set Primary Key (Установить первичный ключ).

5.Сохранение изменений в таблице с помощью щелчка на кнопке Save (Сохранить) панели инструментов (с изображением дискеты).

ВSQL Server имеется два способа отображения информации о ключах: с помощью диспетчера таблиц Table Manager программы SQL Server Enterprise Manager и системных хранимых процедур sp_help и sp_helpconstraint, а также с помощью хранимых процедур ODBC sp keys и sp fkeys.

Первичные и внешние ключи можно удалить с помощью программы SQL Server Enterprise Manager и с помощью оператора ALTER TABLE...DROP CONSTRAINT языка Transact SQL.

13.7. Хранимые процедуры и триггеры

Хранимые процедуры представляют собой фрагменты программного кода на Transact-SQL, которые выполняются на сервере. Они могут запускаться вызывающим их приложением, правилами проверки целостности данных или триггерами. Хранимые процедуры могут иметь параметры, обеспечивающие возможность передавать в нее значения и получать обратно значения, выбираемые из таблиц или вычисляемые при выполнении процедуры.

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

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

По области видимости различают хранимые процедуры следующих четырех типов: системные (System), локальные (Local), временные (Temporary) и удаленные (Remote).

13. Microsoft SQL

Server 2000

505

Системные

хранимые процедуры размещаются в базе данных Master,

ис-

пользуются сервером и администратором. Имена системных процедур начинаются с символов sp_. Для создания собственной системной хранимой процедуры достаточно присвоить ей имя, начинающееся с sp_ и поместить ее в базу данных Master.

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

Временные хранимые процедуры имеют имена, начинающиеся с символов

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

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

Еще одним типом хранимых процедур являются так называемые расширенные хранимые процедуры (extended stored procedures). Они пишутся на языке программирования, таком как С. Расширенные хранимые процедуры оформляются как функции в составе библиотек динамических связей — DLL (Dinamic Link Library), что повышает скорость их выполнения. Имена расширенных хранимых процедур начинаются с символов хр_.

Хранимые процедуры можно создавать как последовательности операторов Transact-SQL (см. одноименный подраздел) с использованием оператора CREATE PROCEDURE и с помощью программы SQL Server Enterprise Manager.

Имя хранимой процедуры может иметь до 128 символов. В хранимой процедуре могут использоваться все операторы SQL, кроме CREATE. По умолчанию разрешение на выполнение хранимой процедуры получает владелец базы данных, который может предоставлять эти права другим пользователям. Оператор создания хранимой процедуры имеет следующий формат:

CREATE PROCEDURE [владелец.]имя_процедуры [;всрсия] [(@имя_параметра тип [=default] [OUTPUT]

[@имя_параметра тип [=default[ [OUTPUT]])]

[FOR REPLICATION | W I T H RECOMPILE]!, ENCRYPTION] AS

<oriepaTopbi_Transact-SQL>

Использование в имени процедуры составляющей «;версия» (задаваемой

506

Часть 3. Современные

СУБД и их

применение

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

D R O P PROCEDURE ргос

Вызов хранимой процедуры для выполнения осуществляется по ее имени. Если хранимая процедура является частью группы, то вызов ее осуществляют с помощью команды EXEC. Например,

EXEC ргос; 3

Пример 1. Создание и использование хранимой процедуры.

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

CREATE PROCEDURE procSelect (@pl char(30), @р2 char (20))

AS

SELECT Name, Department, Cost FROM Employee W H E R E @pl=@p2

Обращение к процедуре может иметь следующий вид:

procSelect Name, 'Коорег'

Возможным результатом такого обращения будет строка вида:

Name Department Cost

Коорег Trade 3000

Создание хранимой процедуры с помощью программы SQL Server Eterprise Manager включает следующие действия.

1.Запуск этой программы из группы программ Microsoft SQL Server.

2.Выбор в открывшемся диалоговом окне программы сервера баз данных

ибазы данных.

3.Выбор элемента Stored Procedures (Хранимые процедуры) и выполнение команды его контекстного меню New Stored Procedure (Создать хранимую процедуру).

4.В открывшемся диалоговом окне Stored Procedure Properties (Свой-

13. Microsoft SQL Server 2000

507

ства хранимой процедуры) в поле Text (Текст) ввод операторов Transact-SQL создаваемой процедуры и указание имени процедуры на месте фразы <PROCEDURE NAME> (рис. 13.3).

5.Нажатие кнопки Check Syntax (Проверка синтаксиса) для проверки отсутствия синтаксических ошибок и при необходимости корректировка операторов для устранения ошибок.

6.Нажатие ОК, в результате чего хранимая процедура создается и сохраняется.

Триггеры представляют собой разновидность хранимых процедур, запус-

S t o r e d P r o c e d u r e P r o p e r t i e s - N e w S t o r e d P r o c e d u r e

General

 

 

Name:

<New Stored Procedure>

emissions.

Owner:

 

 

Create date:

 

 

Text:

CREATE PROCEDURE procSelect !@p1 char|30j. @p2 char(20|| AS

SELECT Name. Department Cost FROM Employee

WHERE @p1-@p2

±L

14, 3/3

Check Syntax

Save as Template

OK

Cancel

Help

Рис. 13.3. Окно создания хранимой процедуры

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

Наиболее часто триггеры применяются для сложных критериев в базе данных в случае, когда недостаточно стандартных ограничений и табличных средств по обеспечению целостности данных. Триггеры можно рассматривать как своего рода фильтры, вступающие в действие после выполнения всех операций в соответствии с правилами, стандартными значениями и т. п. В SQL Server 2000 появилась возможность создавать триггеры и для представлений.

Триггер и вызвавший его оператор Transact-SQL рассматриваются как

508 Часть 3. Современные СУБД и их применение

единая транзакция, отменяемая (откатываемая) из триггера. Обычно в состав триггера входит набор команд выполнения некоторых действий над данными или проверки определенных условий. При невозможности обработки данных или невыполнимости условий происходит откат транзакции.

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

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

CREATE TRIGGER [владелец, [имятриггера

ON [владелец.]{имя_ таблицы | имяпредставления} [WITH ENCRYPTION]

FOR [{AFTER | INSTEAD OF}]

'{INSERT, UPDATE, DELETE} AS

<onepaTopbi_SQL>

Параметр WITH ENCRYPTION (С шифрованием) служит для предотвращения возможности прочтения текста триггера после помещения его на сервер.

После ключевого слова FOR указывается тип триггера: стандартный (AFTER), запускаемый после выполнения пользователем изменений данных, либо выполняемый взамен команды, приведшей к запуску триггера (INSTEAD OF). По умолчанию считается заданным тип AFTER.

Ключевые слова INSERT (Вставить), UPDATE (Обновить) и DELETE (Удалить) определяют операции, которые инициируют выполнение триггера.

SQL Server сохраняет текст триггера в таблице системного каталога syscomments.

Пример 2. Создание триггера вставки.

Рассмотрим создание триггера, который выполняется при вставке записи в таблицу schet. В таблице schet хранится информация о покупках и есть поле, где указывается номер накладной о покупке одной или нескольких единиц товара. Общая сумма стоимости по накладной хранится в отдельной таблице prod. Назначением создаваемого нами триггера является срабатывание на добавление записи в таблицу schet и выполнение добавления записи в таблицу prod, причем номер накладной в обеих таблицах должен совпадать.

CREATE TRIGGER schet_insert

13. Microsoft SQL Server 2000

509

ON schet

FOR INSERT

AS

INSERT INTO prod (schet, sum)

VALUES (vstavka.schet, vstavka.sum)

Замечание.

Для обеспечения высокой надежности работы с БД и возможности восстановления баз данных и приложений целесообразно иметь резервные копии хранимых процедур, триггеров, определений таблиц и общей структуры серверной части приложений SQL Server.

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

13.8. Обеспечение безопасности

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

В SQL Server на уровне сервера используются следующие средства обеспечения безопасности:

идентификация (identification) по имени пользователя при входе в систему;

аутентификация (authentication) — проверка подлинности пользователя с помощью пароля;

учетная запись (login);

встроенные или фиксированные роли сервера (fixed server roles).

На сервере система защиты SQL Server может быть реализована в двух следующих режимах:

• стандартном (Mixed Mode, режим смешанной аутентификации) — комбинацией средств защиты SQL Server и Windows NT/2k;

• интегрированном (Windows Authentification Mode, режим аутентификации Windows) — использованием только средств защиты Windows NT/ 2k.

Названные режимы определяют, как пользователи SQL Server регистрируются на сервере и как они входят в операционную систему Windows NT/2k.

Настройка сервера баз данных на определенный режим функционирова-

510

Часть 3. Современные

СУБД и их

применение

ния системы защиты выполняется с помощью программы SQL Server Enterprise Manager следующим образом:

1.Запуск программы SQL Server Enterprise Manager.

2.Выбор нужного сервера баз данных, открытие окна его свойств, например, с помощью команды Properties (Свойства) контекстного меню и выбор вкладки Security.

3.С помощью переключателей группы Authentication: (аутентификация:)

установка требуемого способа защиты: стандартный — SQL Server and Windows NT/2000, интегрированный — Windows NT/2000 only.

4.С помощью переключателей группы Audit level: (Уровень аудита:) выбирается требуемый вариант учета попыток регистрации пользователей:

None — попытки доступа не протоколируются;

Success — протоколируются только успешные регистрации;

Failure — протоколируются неуспешные попытки регистрации;

АН — протоколируются все регистрации.

Взависимости от конфигурации сервера информация системы аудита содержится в журнале приложений операционной системы (Windows NT/2k application log) или в журнале ошибок SQL Server 2000 или в обоих журналах. Просмотреть содержимое журналов можно с помощью утилит Windows

иSQL Server Enterprise Manager соответственно.

Встандартном режиме защиты контроль и управление учетными записями, используемыми для доступа к серверу, осуществляет SQL Server. Кроме того, SQL Server самостоятельно выполняет аутентификацию пользователей, хранит данные о правах доступа, именах и паролях. Стандартный режим защиты используется наиболее часто. Его рекомендуется применять в случаях, когда в сети не используются средства Windows NT/2k для аутентификации пользователей и при использовании подключения к серверу с помощью различных протоколов.

Винтегрированном режиме защиты контроль над устанавливаемыми пользователями соединениями осуществляет операционная система Windows NT/2k. При этом используются списки контроля доступа ACL (Access Control List). Достоинствами интегрированного режима защиты является то, что после регистрации пользователя в домене (т. е. ввода своего имени и пароля) он сразу получает соответствующие права доступа ко всем ресурсам домена Windows NT/2k, в том числе и к данным SQL Server 2000, а также использование шифрования при передаче по сети. Такой метод автоматического пре-

доставления доступа называется установлением доверительного соединения.

Считается, что этот режим является более защищенным по сравнению с предыдущим, так как аутентификация средствами Windows NT является гораздо более защищенной, чем аутентификация SQL Server.

Рассмотрим более подробно осуществляемую средствами SQL Server орга-

13. Microsoft SQL Server 2000

511

низацию защиты в стандартном режиме. SQL Server в работе использует два уровня доступа пользователей: первый уровень — учетные записи, второй уровень — записи пользователей.

Учетные записи служат для подключения к серверу системы SQL Server, область их действия распространяется на весь сервер. Учетные записи хранятся в таблице sysxlogins системной базы данных master. Учетная запись в SQL Server ассоциируется с паролем, позволяющим получить доступ к любой базе данных сервера.

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

В записи пользователя может быть определена роль пользователя — одна или несколько. Понятие роли было введено в SQL Server 7.0 вместо понятия группы SQL Server 6.x. С ролью пользователя связывают его функции защиты, например, пользователю (одному или нескольким) может быть назначена роль администратора системы безопасности, что дает ему право управлять всеми учетными записями в системе. В SQL Server 2000 можно работать как с группами, так и с ролями.

Набор ролей сервера неизменяем. Никто, даже администратор сервера, не может создать новую роль или удалить существующую роль сервера.

Перечислим фиксированные роли сервера:

sysadmin (члены этой роли имеют наиболее широкие права в SQL Server

2000);

setupadmin (члены этой роли могут управлять связанными серверами, конфигурировать запускаемые автоматически при старте сервера хранимые процедуры);

serveradmin (членам этой роли разрешено останавливать сервер (SHUTDOWN), изменять параметры работы служб (sp configure), изменять конфигурацию (RECONFIGURE) и управлять полнотекстовым поиском (sp_fulltext_sevice));

securityadmin (члены этой роли могут создавать новые учетные записи с правами создания баз данных и их объектов, управлять связанными серверами, включать учетные записи в роль securityadmin и читать журнал ошибок SQL Server);

processadmin (членам данной роли дано право управлять процессами SQL Server 2000, в частности выдавать команду KILL, и включать другие

учетные записи в эту роль);

diskadmin (данная роль используется для управления устройствами предыдущих версий SQL Server);

dbcreator (члены этой роли могут создавать, удалять и переименовы-

512

Часть 3. Современные

СУБД и их

применение

вать БД, а также восстанавливать их резервные копии БД и журналов транзакций);

• bulkadmin (члены этой роли могут вставлять данные с помощью средств массивной закачки, не имея непосредственного доступа к таблицам).

Создание учетной записи рекомендуется выполнять средствами SQL Server Enterprise Manager либо используя системные хранимые процедуры.

С помощью программы SQL Server Enterprise Manager это может быть сделано следующими действиями:

1.Запуск программы.

2.Открытие в окне программы требуемого сервера, затем его папки Security (Безопасность) и выделение объекта Logins (Учетные записи).

3.Выполнение команды Action | New Login (Действие | Новая учетная запись):

4.В открывшемся диалоговом окне ввод данных о новой учетной записи пользователя (на вкладке General (Общие) окна указание имени учетной записи и пароля).

5.На вкладке Database Access (Доступ к базе данных) указание баз данных, к которым пользователю разрешается доступ, нажатие ОК.

Создание записи пользователя в базе данных можно выполнить с помощью SQL Server Enterprise Manager следующими действиями:

1.Запуск программы и выделение в окне программы требуемой базы данных,

2.Выполнение команды Action | New | Database User (Действия | Создать

| Пользователь базы данных). В результате откроется диалоговое окно

Database User Properties (Свойства пользователя базы данных).

3.Выбор в списке Login name: (Учетная запись:) учетной записи, для которой в базе данных создается запись пользователя.

4.В поле User name: (Имя пользователя:) указание имени пользователя.

5.Выбор необходимых для данного пользователя ролей в списке Database role membership: (Роли базы данных:).

Вбазе данных роли могут иметь один из двух типов: standard и application. Роль типа standard назначается пользователю и обеспечивает ему определенные права доступа к объектам базы данных.

Роль типа application назначается приложениям для предоставления прав доступа к объектам базы данных. Роли типа application требуют указания пароля для получения доступа.

Для управления ролями уровня базы данных можно использовать средства Transact-SQL и интерфейс SQL Server Enterprise Manager. Если пользоваться SQL Server Enterprise Manager, то список существующих ролей БД