
- •Базы данных
- •Введение
- •Часть 1. Проектирование баз данных
- •1.1. Некоторые понятия и определения
- •1. 2. Модели данных
- •1.2.1. Иерархическая модель данных
- •1.2.2. Сетевая модель данных
- •1.2.3. Реляционная модель данных Основные определения
- •Типы связей между отношениями
- •1.3. Классификация баз данных
- •1.4. Цели проектирования баз данных
- •1.5. Проектирование баз данных с использованием универсального отношения
- •1.5.1. Универсальное отношение
- •1.5.2. Проблемы, вызываемые использованием универсального отношения
- •Проблема вставки
- •Проблемы обновления
- •Проблемы удаления
- •1.5.3. Нормальная форма Бойса -Кодда
- •Функциональные зависимости
- •Возможный ключ и детерминант
- •Общий подход к декомпозиции
- •Анализ исходных аномалий
- •1.5.4. Возможные потери фз при декомпозиции
- •1.5.5. Избыточные функциональные зависимости
- •Приемы удаления избыточных фз
- •Минимальное покрытие
- •Модернизированный алгоритм проектирования бд
- •1.6. Метод er - проектирования
- •1.6.1. Сущности и связи
- •1.6.2. Степень связи
- •1.6.3. Переход от диаграмм er – типа к отношениям
- •Предварительные отношения для бинарных связей степени 1:1
- •Предварительные отношения для бинарных связей степени 1:n.
- •Предварительные отношения для бинарных связей степени n:m
- •1.6.4. Дополнительные конструкции, используемые в er - методе
- •Необходимость связей более высокого порядка
- •Предварительные отношения для трехсторонних связей
- •Использование ролей
- •1.6.5. Последовательность проектирования бд при использовании er- метода
- •1.6.6. Проверка отношений на завершающейся фазе проектирования
- •1.7. Другие нормальные формы
- •1.8. Контрольные вопросы
- •Часть 2. Специальные аспекты работы с базами данных
- •2.1. Защита данных в базе
- •2.2.1. Общие вопросы защиты данных
- •2.2.2. Реализация защиты данных в различных системах
- •Управление доступом в sql
- •Реализация системы защиты в ms sql Server
- •2.2. Обеспечение целостности данных
- •2.3. Организация параллельных процессов обработки данных
- •2.4. Восстановление бд
- •2.4.1. Уровни восстановления.
- •2.4.2. Восстановление и логический элемент работы
- •Требования к лэр
- •2.4.3. Промежуточное восстановление
- •2.4.4. Длительное восстановление
- •2.5. Математический аппарат, используемый при работе с реляционной базой данных
- •2.5.1. Теоретико-множественные операции реляционной алгебры
- •2.5.2. Специальные операции реляционной алгебры
- •2.6. Контрольные вопросы
- •Часть 3. Разработка приложений для работы с базами данных
- •3.1. Краткий обзор субд
- •3.2. Субд Access
- •3.2.1. Вводные замечания
- •3.2.2. Создание базы данных
- •3.2.3. Создание и работа с таблицами
- •3.2.4. Работа с запросами
- •3.2.5. Создание форм
- •3.2.6. Отчеты в Access
- •3.2.7. Макросы в Access
- •Преобразование макросов в программы на Visual Basic
- •3.2.8. Работа с внешними данными
- •3.3. Программирование в Access
- •3.3.1. Вводные замечания
- •3.3.2. Объявление переменных
- •3.3.3. Константы
- •3.3.4. Тип данных Variant
- •3.3.5. Пользовательские типы данных
- •3.3.5.Операторы, команды и выражения в vba
- •3.3.7. Процедуры vba
- •3.3.8. Управляющие структуры в vba
- •Работа с управляющими структурами
- •3.3.9. Объекты в Access
- •3.3.10. Классы в Access
- •3.3.11. Работа с ошибками в vba
- •3.4.Работа в ms sql –Server
- •3.4.1. Основные количественные показатели системы sql-сервер
- •3.4.2. Создание баз данных
- •3.4.3. Создание таблицы
- •3.4.4. Извлечение данных
- •3.4.5. Добавление данных
- •3.4.6. Изменение данных
- •3.4.7. Удаление данных
- •3.5. Контрольные вопросы
- •Цитированная литература
- •Оглавление
- •Часть 1. Проектирование баз данных 3
- •Часть 2. Специальные аспекты работы с базами данных 71
- •Часть 3. Разработка приложений для работы с базами данных 114
Реализация системы защиты в ms sql Server
Система управления базами данных Microsoft SQL Server 2000 имеет разнообразные средства защиты данных.
Система безопасности базируется на пользователях и учетных записях. Каждый пользователь проходит два этапа проверки системой безопасности. На первом этапе пользователь идентифицируется с помощью регистрационного, или логическом имени и пароля, которые хранятся на сервере SQL Server или в домене Windows NT/2000 в виде учетной записи. Таким образом, пользователь проходит аутентификацию. Если данные введены правильно, пользователь подключается к SQL Server. Подключение к SQL Server, или регистрация, не дает автоматического доступа к базам данных. Для каждой базы данных сервера учетная запись должна отображаться в пользователя базы дачных. На втором этапе на основе прав, выданных человеку (или приложению) как пользователю базы данных, его учетная запись получает доступ к соответствующей базе данных. В разных базах данных одной и той же учетной записи могут соответствовать одинаковые или разные имена пользователя базы данных с разными правами доступа.
Для доступа к базам данных приложений им также понадобятся права. Чаще всего, приложениям выдаются те же права, что предоставлены пользователям, запускающим эти приложения. Однако для работы некоторых приложений необходимо иметь фиксированный набор прав доступа, не зависящих от прав доступа пользователя. SQL Server 2000 позволяет сделать это путем назначения специальных ролей приложения.
На уровне сервера система безопасности оперирует следующими понятиями:
- аутентификация;
- учетная запись;
- встроенные роли сервера.
На уровне базы данных используются следующие понятия:
- пользователь базы данных;
- фиксированная роль базы данных;
- пользовательская роль базы данных;
- роль приложения.
Компоненты структуры безопасности. Фундаментом системы безопасности SQL Server 2000 являются учетные записи, пользователи, роли и группы.
Пользователь, подключающийся к SQL Server, должен идентифицировать себя, используя учетную запись. После того как клиент успешно прошел аутентификацию, он получает доступ к SQL Server. Для получения доступа к любой базе данных учетная запись пользователя отображается в пользователя данной базы данных. Пользователю базы данных предоставляется доступ ко всем объектам базы данных: таблицам, представлениям, хранимым процедурам и т. д.
Пользователи баз данных, в свою очередь, могут объединяться в группы и роли для упрощения управления системой безопасности.
К средствам Transact-SQL, используемым для управления системой безопасности, относится хранимая процедура sp_addlogin. С помощью этой процедуры можно создать новую учетную запись SQL Server.
Хранимая процедура sp_grantlogin позволяет разрешить доступ к SQL Server для пользователя или группы Windows NT.
Пользователи. После того как пользователь прошел аутентификацию и получил идентификатор учетной записи, он считается зарегистрированным и ему предоставляется доступ к серверу. Для каждой базы данных, к объектам которой пользователю необходимо получить доступ, учетная запись пользователя ассоциируется с пользователем конкретной базы данных. Пользователи выступают в качестве специальных объектов SQL Server, при помощи которых определяются все разрешения доступа и владения объектами в базе данных.
При создании базы данных определяются два стандартных пользователя: dbo и guest. Если учетная запись пользователя явно не отображается в пользователя базы данных, пользователю предоставляется неявный доступ с использованием гостевого имени guest. Обычно пользователю guest предоставляется минимальный доступ в режиме «только чтение».
Для обеспечения максимальной безопасности можно удалить пользователя guest из всех баз данных, кроме системных баз данных master и tempdb.
Владелец базы данных — специальный пользователь, обладающий максимальными правами в базе данных.
Пользователь, который создает объект в базе данных, например, таблицу, хранимую процедуру, представление и т. д., становится владельцем объекта. Владелец объекта базы данных имеет все права доступа к созданному объекту. Чтобы пользователь мог создать объект, владелец базы данных должен предоставить пользователю соответствующие права. Полное имя создаваемого объекта включает в себя имя создавшего его пользователя.
Владелец объекта не имеет никакого специального пароля или особых прав доступа. Он неявно имеет полный доступ к объекту, но должен явно предоставить доступ другим пользователям.
SQL Server позволяет передавать права владения от одного пользователя другому. Чтобы удалить владельца объекта из базы данных, сначала необходимо удалить все объекты, которые он создал, или передать права на их владение другому пользователю.
Роли сервера. Роли — это мощный инструмент, добавленный в SQL Server 7.0 и заменивший группы, которые использовались в более ранних версиях. Роль позволяет объединять пользователей, выполняющих одинаковые функции, для упрощения администрирования системы безопасности SQL Server. Роли бывают встроенными и пользовательскими. Первые создаются автоматически при установке сервера (и их состав не может изменяться), тогда, как вторые создаются пользователями.
В SQL Server реализованы два вида стандартных ролей: на уровне сервера и на уровне баз данных. При установке SQL Server 2000 создается 9 фиксированных ролей сервера и 9 фиксированных ролей базы данных. Эти роли нельзя удалить. Кроме того, нельзя модифицировать права их доступа.
Роли баз данных. Роли базы данных позволяют объединять пользователей в одну административную единицу и работать с ней как с обычным пользователем. Можно назначить права доступа к объектам базы данных для конкретной роли, наделяя тем самым всех членов этой роли соответствующими правами. Вместо того чтобы предоставлять доступ каждому конкретному пользователю, а впоследствии постоянно следить за изменениями, можно просто включить пользователя в нужную роль. Если сотрудник переходит в другой отдел, нужно просто удалить его из одной роли и добавить в другую. Создав необходимое количество ролей, которые по возможности охватывали бы все многообразие действий с базой данных, достаточно, при изменении функций членов одной из ролей, изменить права доступа для этой роли, а не устанавливать новые права для каждого пользователя.
В роль базы данных можно включать:
- пользователей SQL Server;
- роли SQL Server;
- пользователей Windows NT;
- группы Windows NT, которым предварительно предоставлен доступ к нужной базе данных.
При создании базы данных для нее определяются стандартные роли базы данных, которые, так же как и стандартные роли сервера, не могут быть изменены или удалены.
Кроме указанных выше ролей существует еще одна — public. Эта роль имеет специальное назначение, поскольку ее членами являются все пользователи, имеющие доступ к базе данных. Нельзя явно установить членов этой роли, потому что все пользователи и так автоматически являются ее членами. Рекомендуется использовать эту роль для предоставления минимального доступа пользователям, для которых права доступа к объектам не определены явно. Если в базе данных разрешен пользователь guest, то установленный для роли public доступ будут иметь все пользователи, получившие доступ к SQL Server. Роль public имеется во всех базах данных, включая системные базы данных master, tempdb, msdb, model, и не может быть удалена.
Роли приложения. Система безопасности SQL Server реализована на самом низком уровне — уровне базы данных. Это наилучший, наиболее действенный метод контроля деятельности пользователей независимо от приложений, используемых ими для подключения к SQL Server.
Отличия между стандартными ролями и ролями приложения фундаментальны. Роль приложения не имеет членов, то есть пользователи SQL Server или Windows NT не могут быть добавлены в эту роль. Роль активизируется, когда приложение устанавливает соединение. Пользователь, работающий в это время с приложением, не является членом роли — только лишь его приложение использует установленное соединение.
Перед использованием роли приложения необходимо сначала создать ее. При создании роли указываются ее имя и пароль для доступа. Создание роли средствами Transact-SQL выполняется с помощью системной хранимой процедуры.
Приложение может быть спроектировано так, чтобы пользователь, работающий с ним, для активизации роли приложения должен был вводить пароль. Однако чаще всего пароль вводится самим приложением незаметно для пользователя. Дополнительно для обеспечения максимальной безопасности пароль может быть зашифрован перед своей отправкой к SQL Server по сети.
Перед установлением соединения с использованием роли приложения пользователю сначала нужно получить доступ к SQL Server.
Если приложение спроектировано для выполнения различных задач с использованием разных прав доступа, необходимо создать отдельную роль для каждой выполняемой задачи. Приложение должно само позаботиться о переключении ролей.
Защита данных. Как бы хорошо ни была спланирована система безопасности SQL Server 2000, остается возможность скопировать файлы с данными и просмотреть их на другом компьютере. Кроме того, с использованием специальных устройств данные могут быть перехвачены при передаче их по сети. Необходимо продумать средства физической защиты данных. Необходимо учитывать, что данные в файлах базы данных хранятся в открытой форме, то есть их можно просмотреть в текстовом редакторе. Конечно, они не будут структурированы, но все же часть информации можно будет прочитать.
Шифрование данных. Шифрование — это метод, используемый SQL Server для изменения данных до нечитабельной формы. Шифрование гарантирует, что ценная конфиденциальная информация не будет просмотрена кем бы то ни было. Можно скопировать данные, но нельзя будет с ними ничего сделать. Для просмотра данных авторизированными пользователями используется дешифрирование.
SQL Server позволяет шифровать следующие данные:
- любые данные, передаваемые между сервером и клиентом по сети;
- пароли учетных записей SQL Server или ролей приложения;
- код, использованный для создания объектов базы данных (хранимых процедур, представлений, триггеров и т. д.).
Пароли учетных записей и ролей приложения всегда сохраняются в системных таблицах SQL Server в зашифрованной форме. Это предохраняет их от просмотра любым пользователем, включая администратора. Кроме того, пароль роли приложения может быть зашифрован перед отправкой его на сервер.
Если код триггера, представления или хранимой процедуры содержит данные или алгоритм, которые необходимо сохранить в тайне, необходимо использовать шифрование этих объектов.
Шифрование данных при передаче их по сети гарантирует, что никакое приложение или устройство не сможет их прочитать, даже если и перехватит. Использование шифрованного соединения позволяет также предотвратить перехват паролей пользователей. Шифрование обеспечивается хранимой процедурой.
SQL Server обеспечивает ограничение доступа к файлам системы.
Права доступа. Когда пользователь подключается к SQL Server, действия, которые он может выполнять в базе данных, определяются правами (разрешениями), выданными им как пользователю и как члену группы или роли, в которой они состоят.
Права в базе данных SQL Server можно разделить на три категории:
- права на доступ к объектам баз данных;
- права на выполнение команд Transact-SQL;
- неявные права (разрешения).
После создания пользователь не имеет никаких прав доступа кроме тех, которые разрешены для специальной роли базы данных public. Права, предоставленные этой роли, доступны всем пользователям в базе данных.
Права пользователю выдаются администратором, владельцем базы данных или владельцем конкретного объекта базы данных. Для предоставления пользователю определенного набора прав можно использовать роли. Создав несколько ролей и предоставив им необходимые права доступа, администратор базы данных может просто включать пользователей в соответствующие роли. Пользователь автоматически получает все права доступа, определенные для роли. Стандартные роли базы данных уже имеют определенный набор прав.
Важно быть осторожным с предоставлением разрешений на доступ к данным. Необходимо внимательно контролировать права доступа, выдаваемые пользователю как непосредственно, так и через членство в группах Windows NT и ролях SQL Server. Особенно это касается больших систем с тысячами пользователей и десятками групп.
Права на доступ к объектам баз данных. Работа с данными и выполнение хранимых процедур требуют наличия класса доступа, называемого правами на доступ к объектам баз данных. Под объектами подразумеваются таблицы, столбцы таблицы, представления, хранимые процедуры. Права на доступ к объектам баз данных контролируют возможность выполнения пользователями, например, команд SELECT, INSERT, UPDATE и DELETE для таблиц и представлений. Таким образом, если пользователю необходимо добавить новые данные в таблицу, ему следует предоставить право INSERT (вставка записей в таблицу). Предоставление же пользователю права EXECUTE разрешает ему выполнение каких-либо хранимых процедур и функций.
Для различных объектов применяются разные наборы прав доступа к ним:
- SELECT, INSERT, UPDATE, DELETE, REFERENCES - эти права могут быть применены для таблицы или представления;
- SELECT и UPDATE — эти права могут быть применены к конкретному столбцу таблицы или представления;
- INSERT и DELETE — эти права применяются для таблицы или представления;
- EXECUTE — это право применяется только к конкретным хранимым процедурам и функциям, разрешая пользователю их выполнение.
- REFERENCES - возможность ссылаться на указанный объект. Применительно к таблицам разрешает пользователю создавать внешние ключи, ссылающиеся на первичный ключ или уникальный столбец этой таблицы. Применительно к представлениям право REFERENCES позволяет связывать представление со схемами таблиц, на основе которых строится представление. Это позволяет отслеживать изменения структуры исходных таблиц, которые могут повлиять на работу представления. Право REFERENCES не существовало в предыдущих версиях SQL Server.
Как следует из выше изложенного, доступ можно предоставлять как на уровне всей таблицы или представления, так и на уровне отдельного столбца. Обычно не практикуется управление правами доступа на уровне конкретного столбца. Если в таблице имеется один или более столбцов, доступ пользователей к которым необходимо ограничить, то в базе данных создается представление, включающее только те столбцы исходной таблицы, доступ к которым необходимо разрешить.
Для управления разрешениями пользователя на доступ к объектам базы данных используется команда GRANT, которую мы рассматривали ранее.
В дополнение к рассмотренному в команде указывается имя того объекта системы безопасности, который необходимо включить в роль. В качестве таких объектов могут выступать как учетные записи SQL Server, так и пользователи и группы пользователей Windows NT, которым предоставлен доступ к серверу баз данных.
Права на исполнение команд Transact-SQL. Этот класс прав контролирует возможность создания объектов в базе данных, создания самой базы данных и выполнения процедуры резервного копирования.
Неявные права. Выполнение некоторых действий не требует явного разрешения и доступно по умолчанию. Третий класс прав как раз предоставляет такие действия. Эти действия могут быть выполнены только членами ролей сервера или владельцами объектов в базе данных.
Неявные права не предоставляются пользователю непосредственно, он получает их лишь при определенных обстоятельствах. Например, пользователь может стать владельцем объекта базы данных, только если он сам создаст объект либо если другой владелец передаст ему права владения своим объектом. Таким образом, владелец объекта автоматически получит права на выполнение любых действий с объектом, в том числе и право, предоставлять доступ к объекту другим пользователям. Эти права нигде явно не указываются, и только факт владения объектом позволяет пользователю выполнять любые действия.
Аналогичная ситуация получается и с ролями сервера.
Для конкретного действия, контролируемого разрешением, возможны три варианта состояния доступа: предоставление, запрещение и неявное отклонение.
Для запрещения пользователю доступа к объектам базы данных используется команда DENY.
Параметры данной команды аналогичны параметрам команды GRANT. Использование параметра CASCADE позволяет отзывать права не только у данного пользователя, но также и у всех тех пользователей, кому он предоставил данные права.
Для неявного отклонения доступа к объектам базы данных можно использовать команду REVOKE, синтаксис которой:
REVOKE [GRANT OPTION FOR]
{ALL | PRIVLEGES}
<колонки_таблицы>
…………….
Параметры имеют смысл, аналогичный параметрам команд GRANT и DENY. Параметр GRANT OPTION FOR используется, когда необходимо отозвать право, предоставленное параметром WITH GRANT OPTION команды GRANT. Пользователь при этом сохраняет разрешение на доступ к объекту, но теряет возможность предоставлять это разрешение другим пользователям.
Неявное отклонение доступа позволяет более гибко конфигурировать систему безопасности.
Конфликты доступа. Разрешения, предоставленные роли или группе, наследуются их членами. Хотя пользователю может быть предоставлен доступ через членство в одной роли, роль другого уровня может иметь запрещение на действия с объектом. В таком случае возникает конфликт доступа.
При разрешении конфликтов доступа SQL Server руководствуется принципом, состоящим в том, что разрешение на предоставление доступа имеют самый низкий приоритет, а запрещение доступа — самый высокий. Это значит, что доступ к данным может быть получен только явным его предоставлением при отсутствии запрещения доступа на любом другом уровне иерархии системы безопасности. Если доступ явно не предоставлен, пользователь не сможет работать с данными.