Uploaded by Красильников Толя

ЛекцияБД 8

advertisement
Механизмы защиты данных в SQL
126
Два типа угроз:
– Внесение некорректных изменений
– Несанкционированный доступ (нарушение конфиденциальности)
•
Локальные средства поддержания целостности данных –
ограничения на атрибуты и таблицы, внешние ключи и т.д.
•
Глобальные механизмы защиты данных в SQL:
– Представления
– Привилегии
– Транзакции
Механизм представлений в SQL
•
Представления (VIEW) ограничивают доступ к базе данных из
приложений
•
Представление – виртуальное отношение (таблица), как правило,
создается для работы с базой данных из приложений
•
Создание представления:
CREATE VIEW <имя_представления> AS
<выборка SELECT>
•
Пример: создать представление, в которое поместить данные о
поставщиках, не проживающих в Москве
CREATE VIEW SuppliersNotMsk AS
SELECT *
FROM Suppliers WHERE City <> ‘Москва’
•
Замечание: таблица SuppliersNotMsk является виртуальной - мы как бы 127
накладываем на базовую таблицу Suppliers маску, через которую
часть кортежей становятся недоступными в представлении
•
Можно сделать недоступными в представлении атрибуты базовой
таблицы
•
Пример: создать представление, в которое поместить все данные о
поставщиках, кроме рейтинга
CREATE VIEW SuppliersNotRating AS
SELECT CodS, Surname, City FROM Suppliers
•
Еще один пример полезного использования представлений:
CREATE VIEW SuppliersStat AS
SELECT CodS, COUNT(*), SUM(Quant), AVG(Quant)
FROM SupDet
GROUP BY CodS
•
Представления – это надёжный интерфейс, через который мы
получаем доступ к базовым таблицам , скрывая их внутреннее
устройство
•
Активное использование представлений считается признаком
хорошего проектирования баз данных SQL
•
Проблема обновляемости представлений:
– оператор SELECT может неограниченно использоваться для
выборки данных из базовых таблиц через представления
– имеются существенные ограничения на изменение данных через
представления операторами INSERT, DELETE, и UPDATE
Базовые принципы механизма привилегий в SQL
128
Контроль прав доступа данного пользователя к таблицам БД
производится на основе механизма привилегий
•
Каждый пользователь имеет специальное идентификационное имя
или номер (ID пользователя)
•
Вход в систему пользователь может выполнить только под своим ID,
зарегистрированным в системе
•
Каждому пользователю (ID пользователя) назначается некоторый
набор привилегий – действий, которые ему доступны
•
Операторы SQL для системы привилегий:
– GRANT – назначить привилегию
– REVOKE – лишить привилегии
•
Примеры:
Назначить Ivanov право добавлять и удалять строки в таблице SupDet
GRANT INSERT, DELETE ON SupDet TO Ivanov
Назначить Sidorov право выполнять любые действия в таблице SupDet
GRANT ALL ON SupDet TO Sidorov
Назначить всем право изменять атрибут Quant в таблице SupDet
GRANT UPDATE ON SupDet(Quant) TO PUBLIC
Лишить Petrov права добавлять и удалять строки в таблице Supplies
REVOKE INSERT, DELETE ON Supplies FROM Petrov
•
129
Механизм транзакций в SQL
•
Механизм транзакций обеспечивает возможность восстановления
целостного состояния базы данных после ошибок пользователя,
программных или аппаратных сбоев
•
Транзакция в SQL – это группа логически связанных операторов SQL,
которые должны быть либо выполнены все вместе, либо не должен
быть выполнен ни один из них
•
Основное свойство транзакции: до начала выполнения транзакции и
после ее завершения база данных должна находиться в целостном
состоянии, транзакция переводит базу данных из одного целостного
состояния в другое
•
Транзакция может рассматриваться как минимальная единица
активности пользователя по отношению к базе данных
•
Пример: удалить из базы данных поставщика с кодом S2
•
Очевидно, необходимо сначала решить вопрос с поставками,
например, передать их поставщику S4, поэтому операции передачи
поставок другому поставщику и удаления поставщика из таблицы
необходимо объединить в одну транзакцию
•
Транзакция удаления из базы данных поставщика с кодом S2 :
UPDATE SupDet
SET CodS = 'S4'
WHERE CodS = 'S2‘;
DELETE FROM Suppliers
WHERE CodS = 'S2';
•
•
•
•
130
Транзакция должна заканчиваться одной из двух команд:
COMMIT; – фиксирует в базе данных все изменения,
сделанные в ходе выполнения транзакции
ROLLBACK; – отменяет все изменения, сделанные в ходе
выполнения транзакции, не фиксируя их в базе данных (откат)
В PostgreSQL транзакция определяется набором SQL-команд,
окружённым командами BEGIN и COMMIT/ROLLBACK
BEGIN; -- открываем транзакцию
UPDATE SupDet
SET CodS = 'S4'
WHERE CodS = 'S2‘;
DELETE FROM Suppliers
WHERE CodS = 'S2';
COMMIT; -- закрываем транзакцию (или ROLLBACK; )
На самом деле PostgreSQL отрабатывает каждый SQL-оператор
как транзакцию. Если вы не вставите команду BEGIN, то каждый
отдельный оператор будет неявно окружён командами BEGIN и
COMMIT
Если последовательно выполняемые в сеансе работы с базой
данных операторы логически не связаны и каждый из них не
нарушает целостности, каждый оператор выделяется в отдельную
транзакцию
Проблема параллельных транзакций
•
•
В многопользовательском режиме возможны ситуации, когда
одновременно поступает запрос к одной и той же таблице - при этом
могут возникать конфликтные ситуации
Пример конфликтной ситуации:
SELECT AVG(Rating)
FROM Suppliers
•
•
•
•
131
UPDATE Suppliers
SET Rating = Rating*2
Для управления параллельными транзакциями в SQL используется
механизм блокировок (locks)
Блокировки накладывают ограничение на выполнение некоторых
операций над данными, если в этот момент активны другие операции,
при этом блокируемые операции выстраиваются в очередь
Виды блокировок:
S- locks – разделяемые блокировки: в единицу времени может
выполняться несколькими пользователями
X- locks – исключительные блокировки: запрещается доступ к
данным всем пользователям, кроме того, чья блокировка в
данный момент активна
Уровень изолированности транзакций определяет, в какой мере в
результате выполнения логически параллельных транзакций
допускается получение несогласованных данных.
•
•
•
•
•
•
•
Шкала уровней изолированности транзакций: более высокий уровень
132
изолированности - лучшая согласованность данных, возможное снижение
количества физически параллельно выполняемых транзакций.
Более низкий уровень - позволяет выполнять больше параллельных
транзакций, но снижает точность данных. На практике необходим компромисс
между скоростью работы и гарантированной согласованностью получаемых
данных.
4 стандартных уровня изоляции
Read uncommited (чтение незафиксированных данных)
– Можно увидеть изменения незавершенных транзакций
Read commited (чтение фиксированных данных)
– Можно увидеть изменения только завершенных транзакций
Repeatable read (повторяющееся чтение)
– То, что прочитано однажды, будет прочитано еще раз
Serializable (упорядочиваемость)
– Полная иллюзия последовательного выполнения, в частности, отсутствие
неожиданно появляющихся строк
Уровень
изоляции
Фантомное
чтение
Неповторяющееся
чтение
«Грязное»
чтение
Потерянное
обновление
READ
UNCOMMITTED
-
-
-
+
READ
COMMITTED
-
-
+
+
REPEATABLE
READ
-
+
+
+
SERIALIZABLE
+
+
+
+
Download