- •2. Реляционная модель данных
- •2.1. Определения и понятия
- •2.2. Первичные ключи и индексы
- •2.3. Реляционные отношения между таблицами
- •2.3.1. Отношение один-ко-многим
- •2.3.2. Отношение один-к-одному
- •2.3.3. Отношение многие-ко-многим
- •2.3.4. Связи между записями одной таблицы
- •2.4. Ссылочная целостность
- •2.5. Индексы
- •Упражнения и задачи
- •3. Нормализация отношений
- •3.1. Первая нормальная форма
- •3.2. Функциональные зависимости и детерминанты
- •3.3. Вторая нормальная форма
- •3.4. Третья нормальная форма
- •3.5. Нормальная форма Бойса-Кодда (нфбк)
- •3.6. Нормализация за и против
- •Контрольные вопросы
- •Упражнения и задачи
- •4. Операции с данными в реляционной модели
- •4.1. Объединение
- •4.2. Пересечение
- •4.3. Вычитание
- •4.4. Декартово произведение
- •4.5. Выбор
- •4.6. Проекция
- •4.7. Соединение
- •4.8. Деление
- •Упражнения и задачи
- •5. Запросы к бд
- •5.1. Простые запросы
- •5.2. Многотабличные запросы
- •5.3. Подзапросы
- •6. Сетевая модель данных
- •6.1. Исторический контекст
- •6.2. Основные понятия и определения
- •Торговый-агент
- •Строка-элемент
- •6.3. Преимущества и недостатки сетевых моделей
- •Упражнения и задачи
- •7. Иерархическая модель данных
- •7.1. Основные понятия и определения
- •7.2. Преимущества и недостатки иерархических моделей
- •Упражнения и задачи
- •Часть 2. Управление окружением базы данных
- •1. Администрирование баз данных
- •1.1. Функции абд
- •1.1.1. Работа с пользователями
- •1.1.2. Установление стандартов и процедур
- •1.2. Задачи абд
- •2. Защита базы данных
- •2.1. Идентификация пользователя
- •2.2. Проверка полномочий и представления данных
- •2.3. Шифровка
- •Метод поалфавитной подстановки
- •2.4. Секретность данных
- •4. Целостность данных
- •4.1. Контроль типов
- •4.2. Контроль изменений
- •4.3. Целостность на уровне ссылок
- •5. Параллельная работа с бд
- •5.1. Обработка транзакций
- •5.2. Параллельная работа с бд
- •Литература
2.2. Проверка полномочий и представления данных
Представление данных – это средство предоставления пользователю его личной модели базы данных. Это также удобный способ ограничения доступа пользователя к различным частям базы данных: данные, которые пользователю не нужно видеть, просто спрятаны от него. Это упрощает работу с системой, повышая попутно защищенность базы данных. Представления данных могут создаться при помощи операции выбора, создания проекций или соединения существующих таблиц. Таким образом, возможности пользователя могут быть ограничены рассмотрением только части некоторой существующей таблицы или же соединения некоторых таблиц.
Типы доступа к представлениям данных. Для каждого представления данных возможны различные типы доступа:
Право чтения: позволено только чтение данных, но не их изменение.
Право ввода: позволен ввод новых данных, но не изменение существующих.
Право обновления: позволено изменение данных, но не их удаление.
Право удаления: позволено удаление данных.
Эти типы доступа обычно обеспечиваются назначением для предоставления данных нескольких паролей. Например, предположим, что у нас есть таблица 4.1 «Работник» и мы хотим, чтобы пользователь Васильев имел доступ только к атрибутам № РАБОТНИКА и ФАМИЛИЯ, причем только для чтения. Этого можно добиться, создав представление данных, содержащее только атрибуты № РАБОТНИКА и ФАМИЛИЯ. Для представления данных № РАБОТНИКА_ФАМИЛИЯ можно создать пароль, дающий право доступа только для чтения (команда SQL):
GRANT READ ACCESS ON № РАБОТНИКА_ФАМИЛИЯ TO Васильев
Общая форма такого предоставления права доступа в SQL с командой GRANT выглядит следующим образом:
GRANT <список полномочий > ON <имя представления данных или таблицы>
TO <список пользователей>
Список полномочий позволяет перечислить несколько полномочий (чтения, удаления и/или обновления) в одной команде.
Представления данных и защита в SQL . Общий синтаксис команды SQL, создающей представление данных, имеет следующий вид:
CREATE VIEW имя_представления_данных (список нужных атрибутов, если не совпадает с базовой таблицей) AS запрос.
Рассмотрим
конкретный пример, в котором
используется таблица 4.1. Предположим,
что мы хотим ограничить доступ к
этой таблице пользователю
,
позволяя ему просматривать только
информацию о работнике, номер которого
1235.
GREAТE VIEW № Работника 1235 АS SELECT № Работника, Фамилия, Недельная зарплата, Специальность
FROM Работник
WHERE № Работника = 1235
Предположим,
что
позволено просматривать всю информацию
таблицы «Работник», кроме информации
о зарплате. Соответствующее представление
данных выглядит так:
CREATE VIEW Работник1
AS SELECT № Работника, Фамилия, Специальность
FROM Работник
На некоторых пользователей может быть возложена ответственность за поддержание элементов данных, следовательно, им разрешен доступ к системным таблицам, за которые они отвечают. Поскольку системные таблицы сами представляют собой реляционные таблицы, то для них тоже можно создавать представления данных. Приведем пример:
CREATE VIEW МОИ_ТАБЛИЦЫ
AS SELECT *
FROM SYSTABLES
WHERE CREATOR = USER
USER
– ключевое слово, требующее присвоения
значения во время выполнения. Таким
образом, если
вводит команду
SELECT *
FROM МОИ_TAБЛИЦЫ
система выполняет запрос, как если бы было написано
SELECT *
FROM МОИ_TAБЛИЦЫ
WHERE
CREATOR =
![]()
Запросы
такого рода называются контекстно-зависимыми,
поскольку выдаваемый ими результат
зависит от контекста (
).
Иногда пользователю позволен доступ к статическим данным, вычисленным по базовой таблице, но запрещен доступ к отдельным значениям. Рассмотрим пример, в котором используется таблица «Проект», имеющая следующую схему: ПРОЕКТ (№, ФАМИЛИЯ, АДРЕС, ПОЧТОВАЯ ОПЛАТА, ОТДЕЛ). Например, пользователю может быть, разрешено смотреть только среднюю почасовую оплату из таблицы. Такое ограничение поддерживается следующим представлением данных:
CREATE VIEW AVG (№, ФАМИЛИЯ, СР._ОПЛ., OТДЕЛ)
AS SELECT №,ФАМИЛИЯ,AVG (ПОЧ._ ОПЛ),ОТДЕЛ
FROM ПРОЕКТ GROUP BY OТДЕЛ
Обратите внимание, что в представлении данных создается атрибут (СР._ОПЛ), которого не существовало в базовой таблице «Проект». Его значения вычисляются командой SELECT - берется среднее значение атрибута ПОЧТОВАЯ ОПЛАТА для каждого отдела.
Хотя применение представлений данных может быть эффективным средством защиты, система должна уметь приспосабливаться к изменяющимся со временем требованиям. В SQL такую возможность дают команды GRANT и REVOKE. Приведем примеры:
GRANT SELECT ON TABLE C TO Иванов, Петров
Команда означает, что Иванову и Петрову предоставлено право применять любые операции SELECT к таблице «C».
GRANT SELECT, UPDATE (ОТДЕЛ) ON TABLE C TO Петров
Это означает, что Петров имеет право применять любые операции SELECT к таблице «C», а также обновлять значения атрибутов ОТДЕЛ.
REVOKE SELECT ON TABLE C FROM Иванов
Эта команда означает, что Иванов больше не имеет права выполнять операции SELECT над таблицей «С».
Список привилегий, которые относятся к таблицам:
SELECT (выбор)
UPDATE (обновление)
DELETE (удаление)
INSERT (ввод)
Опция GRANT может распространяться на других пользователей. Например, если Иванов имеет право передать привилегию А Петрову, то Петров имеет право передать привилегию А другому пользователю, Васильеву и т.д.
Иванов:
GRANT SELECT ON TABLE C TO Петров WITH GRANT OPTION
Петров:
GRANT SELECT ON TABLE C TO Васильев WITH GRANT OPTION
До тех пор пока пользователь получает GRANT OPTION, он может передавать ту же привилегию другим пользователям.
Если Иванов позже хочет отозвать GRANT OPTION, то он может сделать так:
REVOKE SELECT ON TABLE C FROM Петров
Такой отзыв будет применен как к Петрову, так и ко всем, кому он передал привилегию, и т.д.
