
- •Н.И. Коваленко
- •Коваленко н.И., Банчук г.Г.
- •Коваленко Надежда Ивановна
- •Тема I. Общие сведения о ms sql Server 2000
- •1. Базы данных типа клиент/сервер
- •Система типа клиент/сервер
- •2. История sql Server
- •Основные количественные показатели системы sql – сервер
- •3. Обзор sql Server 2000
- •4. Стандартные объекты sqlServer
- •ТемаIi. Работа с ms sqlServer2000 и его компонентами
- •1. Запуск, приостановка и завершение работы sqlServer
- •2. SqlServerEnterpriseManager
- •3. Программа sqlServerQueryAnalyzer
- •Панель инструментов утилиты Query Analyzer
- •4. Обслуживание баз данных
- •Файлы операционной системы, используемые sql Server 2000:
- •Структура базы данных
- •5. УстановкаMicrosoftSqlServer2000
- •Ограничения инсталляции sql-сервера
- •ТемаIii. Работа с базой данных создание и использование индексов и ключей
- •1. Базы данных и их свойства
- •Описание ролей, используемых для доступа к базе данных и серверу баз данных
- •Дополнительные опции настройки базы данных
- •Настройка параметров доступа к базе данных
- •2. Таблицы базы данных.
- •3. Типы данных, используемые в sql-сервере
- •Текстовые типы данных
- •Типы данных даты и времени
- •Типы данных для хранения больших объемов информации
- •Типы данных специального назначения:
- •4. Основные операции с базами данных
- •5. Восстановление бд (администрированиеSqlServer2000)
- •6. Создание и использование индексов и ключей в системе sql Server.
- •7. Использование ограничений
- •8. Использование диаграмм для разработки структуры базы данных
- •9. Создание представлений (видов)
- •ТемаIv. Правила и создание значения
- •1. Инструменты контроля целостности данных
- •2. Создание правил и стандартных значений
- •ТемаV. Триггеры в системеSql–сервер
- •1. Понятие триггера. Типы триггеров
- •2. Создание триггеров
- •3. Использование триггеров. Виды триггеров
- •ТемаVi. Оптимизация запросов и основы sql
- •1. Оптимизация запросов
- •2. Основные операторы sql в sql Server 2000
- •3. Объединение таблиц в операторе select
- •From titles
- •4. Использование директив group by иHaving
- •5. Оператор insert
- •6. ОператорUpdate
- •7. ОператорDelete
- •8. ОператорCreatetable
- •ТемаVii. Создание и работа с представлениями
- •1. Основные сведения о представлениях
- •2. Создание представлений. Отображение представлений
- •3. Редактирование представлений. Отображение зависимостей представлений. Создание представлений и представлений
- •4. Переименование столбцов представлений. Переименование представлений. Удаление представлений
- •5. Изменение данных посредством представлений. Обновление данных с помощьюSqlServerEnterpriseManager
- •ТемаViii. Создание и использование курсоров
- •1. Понятие курсора
- •2. Выборка данных из курсора
- •3. Операторы и глобальные переменные для работы с курсорами
- •4. Примеры использования курсоров
- •ТемаIx. Использование хранимых процедур
- •1. Достоинства и недостатки хранимых процедур
- •2.Создание хранимой процедуры
- •3. Операторы языка управления программой. Оператор declare
- •4. Операторы goto, begin…end и if…else
- •5. Операторы waitfor, return, while, break и continue
- •6. Операторы print и raiserror
- •7. Использование параметров в хранимых процедурах
- •8. Глобальные переменные. Отладка хранимых процедур
- •Тема X. Транзакции и блокировки
- •1. Определение транзакции. Ограничения для транзакций. Уровни изоляции транзакций
- •2. Базовая информация о блокировках. Типы блокировок
- •3. Создание транзакций и работа с ними. Точки сохранения
- •4.Отображение информации о блокировках. Явное задание блокировки
- •Описание параметров для явного задания блокировок
- •ТемаXi. Система безопасностиSqlServer2000
- •1. Типы безопасности. Создание и управление бюджетами пользователей
- •Стандартные роли сервера
- •Стандартные роли базы данных
- •2. Добавление новых пользователей. Удаление идентификаторов и пользователей
- •3. Создание ролей. Удаление ролей
- •4. Права доступа. Управление правами доступа
- •ТемаXii. Использование распределенных объектов управления.
- •1.Sql-dmo. Назначение, возможности
- •2. Экспорт данных с помощью команды вср
- •3. Использование объектовSql-dmOв хранимых процедурах
- •ТемаXiii. Основные сведения о хранилищах данных
- •1. Хранилища данных. Системы поддержки принятия решений (dss). Интерактивная аналитическая обработка (olap)
- •Сравнение субд и хранилища данных
- •2. Компоненты хранилища данных. Хранилища данных и магазины данных
- •3. Преобразование данных. Метаданные
- •4. Разработка плана хранилища данных
- •Microsoft Repository
- •С помощью мастера dts можно выполнять также простые преобразования данных, сложные преобразования выполняются с помощью dts Designer.
- •ТемаXiv. Использование служб преобразования данных
- •1. Службы преобразования данных (dts).DtSи хранилища данных
- •2. СредствоDtsDataPump
- •3. МастераDts
- •4. ИспользованиеDtsDesigner
- •Тема XV. Службы olap Microsoft sql Server
- •1.OlaPи многомерные данные
- •2. Хранение данных в бдolap
- •3. Оптимизация базы данныхOlap
- •4. Доступ к многомерным данным
4. Права доступа. Управление правами доступа
Права доступа (permissions) — это права, дающие возможность доступа к объекту (например, таблице) базы данных. Право доступа предоставляется пользователю или группе для выполнения таких функций, как выборка данных, добавление новых строк или обновление данных.
Право доступа косвенно предоставляется владельцу или создателю объекта. Владелец объекта может затем сам принимать решение о предоставлении прав доступа другим пользователям или группам, как он считает нужным. Существует несколько типов прав доступа к объектам базы данных:
Право на выполнение инструкций SQL (statement permission) — определяет набор прав пользователя на выполнение выражений, например, на создание базы данных.
Право на работу с объектами (object permission) — определяет набор прав пользователя при работе с данными или выполнении хранимых процедур.
Предопределенные права (predefined permission) — определяют набор действий, которые разрешено выполнять только пользователям, включенным в определенные стандартные роли, или владельцам объектов базы данных.
Право на выполнение выражений: Предположим, что нам надо создать базу данных. Для этого необходимо выполнить инструкцию CREATE DATABASE, даже если мы используем для этой целиSQLServerEnterpriseManager. Система безопасностиSQLServerпредоставляет возможность запретить пользователям, не являющимся членами ролейsysadmin, db_owner или db_ddladmin, выполнять такого рода инструкции, к которым относятся:
CREATE DATABASE CREATE DEFAULT CREATE
PROCEDURE CREATE RULE
CREATE TABLE CREATE VIEW BACKUP DATABASSE BACKUP LOG.
Ограничив круг пользователей, обладающих такими правами, можно будет избежать очень многих проблем. Если же право на выполнение выражений имеют достаточно много пользователей и ролей, при этом еще и отнесенных к разным ролям, то вполне вероятна ситуация, когда цепочка владения окажется разорванной. Эту проблему можно решить с помощью системной хранимой процедуры SP_CHANGEOBJECTOWNER, которая позволяет сменить владельца объекта:
SP_CHANGEOBJECTOWNER объект, владелец.
Но в большинстве случаев это крайняя мера, свидетельствующая о том, что недостаточно четко продумана система безопасности. И лучше все-таки изменить именно систему.
Право доступа к объектам (object permission) имеет отношение к таблицам и другим объектам базы данных, таким как хранимые процедуры и представления.
Ниже приведен список и описание прав доступа к таблицам:
SELECT — дает возможность пользователю выбрать или прочесть данные из таблицы или представления. Следует заметить, что право доступа SELECT может быть предоставлено к индивидуальным столбцам, а не только ко всей таблице или представлению.
INSERT — дает возможность пользователю добавить новые данные в таблицу или представление.
UPDATE — дает возможность пользователю изменить данные в таблице или представлении.
DELETE — дает возможность пользователю удалить данные из таблицы или представления.
EXECUTE — дает возможность пользователю выполнить хранимую процедуру.
DRI/REFERENCES — дает возможность пользователю добавить к таблице условие на значение.
Для управления правами доступа интерфейс Transact-SQL SQL Server содержит инструкции GRANT, DENY и REVOKE. С точки зрения системы разграничения доступа каждый пользователь может находиться в одном из трех состояний:
Пользователь имеет право выполнять определенное действие.
Пользователю запрещено выполнять определенное действие.
Пользователь не имеет четко определенных разрешений и запретов.
Инструкция GRANT используется для предоставления прав доступа пользователям или ролям в SQL Server. Наличие определенного права доступа дает пользователю или роли возможность выполнять нужные действия. Синтаксис инструкции GRANT для выражений и объектов:
GRANT {ALL | выражение [, ... n]}
ТО бюджет_безопасности [, ... n]
GRANT {ALL [PRIVILEGES] | список_прав_доступа [, ... n]}
{ [(список_столбцов[, ... n])]
ON [таблица | представление} | [ ... n]
[(список_ столбцов [, ... n])] |
ON {хранимая процедура | расширенная хранимая процедура}}
ТО бюджет__безопасности [, ... n]
[WITH GRANT OPTION]
[AS {rpynna_Windows_NT | роль}]
Инструкция DENY применяется для удаления права доступа. В отличие от GRANT, инструкция DENY служит для удаления любого права доступа, предоставленного пользователю или роли. Кроме того, сервер отслеживает, чтобы в будущем пользователь или роль не унаследовали отобранные права от другой роли. Синтаксис инструкции DENY для выражений и объектов:
DENY {ALL | выражение [, ... n]}
ТО бюджет_безопасности [, ... n]
DENY {ALL [PRIVILEGES] | список__прав_доступа [, ... n]}
{ [(список_столбцов [, ... n])]
ON {таблица | представление} | [... n]
[(список_столбцов [, ... n])] |
ON {хранимая процедура | расширенная_хранимая_процедура}}
ТО бюджет_безопасности [, ... n]
[CASCADE]
Инструкция REVOKE используется для удаления предоставленных ранее прав доступа пользователям или ролям в SQL Server. При этом информация о правах берется из соответствующей роли. Синтаксис инструкции REVOKE для выражений и объектов имеет, соответственно, следующий вид:
REVOKE {ALL | выражение [, ... n]}
ТО бюджет_безопасности [, ... n]
REVOKE {ALL [PRIVILEGES] | список_прав_доступа [, ... n]} { [(список столбцов [, .. n])]
ON (таблица | представление} | [...n]
[(список_столбцов [, ... n])] | ON
{хранимая_процедура | расширенная хранимая_процедура}}
(ТО | FROM} бюджет_безопасности [, ... n]
[CASCADE]
[AS {группа_Wlndows_NT | роль}]
Инструкции GRANT, DENY и REVOKE имеют практически идентичные параметры. Рассмотрим некоторые из них:
список_прав_доступа — список прав доступа, которые предоставляются или уничтожаются. Для отделения прав доступа в списке следует использовать запятую. Если указаны все права доступа (ALL), то данному пользователю или группе будут предоставлены права доступа того, кто их устанавливает;
таблица, представление, хранимая__процедура и т. п. — имя объекта, право доступа к которому предоставляется или уничтожается;
список - список имен пользователей или ролей, которым предоставляются права доступа или права которых уничтожаются. Для отделения множества имен в списке следует использовать запятые.
К инструкции GRANT может быть присоединена опция WITH GRANT OPTION, позволяющая определить права доступа, с которыми будет возможность предоставления аналогичных прав другим пользователям. Это очень удобная опция, но применять ее нужно с осторожностью. Из соображений безопасности лучше всего, если данную опцию будет использовать только системный администратор.
Ниже приведен пример предоставления прав доступа SELECT и UPDATE к таблице Authors:
GRANT SELECT, UPDATE
ON Authors
TO PUBLIC
GO
Ниже приведен пример удаления права доступа DELETE к таблице Editors:
DENY DELETE
ON Editors
FROM PUBLIC
GO
Для каждого объекта базы данных можно получить информацию о правах различных пользователей и ролей. Эти данные могут быть получены с помощью хранимой процедурой SP_HELPROTECT.
Представления дают удобный способ улучшения безопасности, т.к. они ограничивают данные, доступные пользователям. Например, можно иметь группу пользователей, которым не дозволено просматривать информацию по авторам, получающим более чем 50% гонорара. Эта информация доступна только главным менеджерам или другим работникам внутри компании. Ниже показано, как можно выполнить эту задачу с помощью Transact-SQL.
/* Сначала добавим роль */
SP_ADDROLE grp_junior_emp
GO
/* Теперь уничтожим право доступа SELECT
роли public к таблицам базы данных */
DENY SELECT ON TitleAuthors FROM public
GO
DENY SELECT ON Authors FROM public
GO
/* Теперь создадим представление, ограничивающее доступ */
CREATE VIEW View_Authors
AS
SELECT *
FROM Authors
WHERE au_id IN (SELECT au_id
FROM TitleAuthors
WHERE royaltyper <= 50)
GO
/* Предоставим членам роли grp_junior_emp право доступа SELECT к представлению View_Authors */
GRANT SELECT ON View_Authors TO grp_junior_emp
GO
Помимо представлений, для обеспечения уровня безопасности, полностью скрывающего доступную пользователю информацию или деловые процессы, происходящие при манипулировании данными, могут быть применены хранимые процедуры.
Ниже показано, как выполняется скрытие данных, продемонстрированное на примере предыдущего листинга. Но теперь доступ к информации ограничивается применением хранимой процедуры.
/* Сначала добавим роль */
SP_ADDROLE grp_junior_emp
GO
/* Теперь уничтожим право доступа SELECT группы public к таблицам базы данных */
DENY SELECT ON TitleAuthors FROM public
GO
DENY SELECT ON Authors FROM public
GO
/* Теперь создадим хранимые процедуры, ограничивающие доступ */
CREATE PROCEDURE up__SelectAuthors
AS
SELECT *
FROM Authors
WHERE au_id IN (SELECT au_id
FROM TitleAuthors
WHERE royaltyper <= 50)
GO
/* Предоставим членам роли grp_junior_emp право доступа EXECUTE к хранимой процедуре up_SelectAuthors */
GRANT EXECUTE ON up_SelectAuthors TO grp_junior_emp
GO
Как видно из приведенного примера, младшие работники (grp_junior_emp) имеют возможность обновлять флаг contract таблицы Authors без дополнительных прав доступа к ней. Этот вид процедуры дает возможность скрыть от пользователей манипуляцию данными, в то же время они будут иметь ограниченные возможности работы с доступными им данными на сервере.
/* Сначала добавим группу*/
SP_ADDGROUP grp_junior_emp
GO
/* Теперь уничтожим право доступа UPDATE, DELETE, INSERT группы public к таблице базы данных Authors */
DENY UPDATE, DELETE, INSERT ON Authors FROM public
GO
/*Теперь создадим хранимые процедуры, ограничивающие доступ */
CREATE PROCEDURE up_SetContractForAuthor
@nAu_Id id,
@bContract bit
AS
UPDATE Authors
SET contract = @bContract
WHERE au_id = @nAu_Id
PRINT "Автор заключил контракт"
GO
/* Предоставим членам группы grp_junior_emp право доступа EXECUTE к хранимой процедуре up__SetContractForAuthor */
GRANT EXECUTE ON up_SetContractForAuthor TO grp_junior_emp
GO
Стратегия безопасности зависит от параметров инсталляции SQL Server. Оставляя бюджет системного администратора (SA) без пароля, вы совершаете наиболее общую ошибку администраторов. Необходимо сразу же после окончания установки определить пароль этого бюджета. Никогда не позволяйте работникам применять бюджет SA для стандартной поддержки. Для выполнения необходимых изменений в базах данных их проектов они могут использовать бюджет, основанный на правах доступа к базе.
Безопасность SQL Server — это комплексный набор мер, позволяющий контролировать доступ к базе данных на различных уровнях. Для того чтобы сделать систему безопасной или одновременно достаточно открытой, рекомендуется комбинировать различные технологии. При разработке системы безопасности всегда помните о всех возможных путях доступа, даже если они маловероятны. Это значит, что если сервер находится в системе, которая также соединена с Internet, обязательно примите во внимание необходимость мощной системы безопасности, предотвращающей доступ в систему неизвестных пользователей. Если система доступна через Internet или через какой-либо другой внешний канал, ее безопасность должна быть чрезвычайно жесткой.