- •Часть IV
- •Глава 13 Восстановление
- •13.1. Введение
- •13.2. Транзакции
- •13.3. Восстановление транзакции
- •13.4. Восстановление системы
- •13.5. Восстановление носителей
- •13.6. Двухфазная фиксация
- •13.7. Поддержка языка sql
- •13.8. Резюме
- •Глава 14 Параллелизм
- •14.1. Введение
- •14.2. Три проблемы параллелизма
- •14.3. Блокировка
- •14.4. Решение проблем параллелизма
- •14.5. Тупиковая ситуация
- •14.6. Способность к упорядочению
- •14.7. Уровни изоляции
- •14.8. Преднамеренная блокировка
- •IX s
- •14.9. Поддержка блокировок в sql
- •14.10. Резюме
- •14.13. Papadimitriou с. The Theory of Database Concurrency Control.— Rockville, Md.: Computer Science Press, 1986.
- •Глава 15 Безопасность
- •15.1. Введение
- •15.2. Общие соображения
- •15.3. Избирательное управление доступом
- •15.4. Модификация запроса
- •15.5. Обязательное управление доступом
- •15.6. Шифрование данных
- •Стандарт шифрования данных
- •15.7. Поддержка мер обеспечения безопасности в языке sql
- •15.8. Резюме
15.7. Поддержка мер обеспечения безопасности в языке sql
В действующем стандарте языка SQL предусматривается поддержка только избирательного управления доступом. Она основана на двух более или менее независимых частях SQL. Одна из них называется механизмом представлений, который (как говорилось выше) может быть использован для скрытия очень важных данных от несанкционированных пользователей. Другая называется подсистемой полномочий и наделяет одних пользователей правом избирательно и динамично задавать различные полномочия другим пользователям, а также отбирать такие полномочия в случае необходимости. Ниже эти части языка SQL обсуждаются более подробно.
Представления и безопасность
Продемонстрируем использование представлений для обеспечения безопасности с помощью описанных на языке SQL примеров 1-5, аналогичных приведенным в разделе 15.3.
1. CREATE VIEW EX1 AS
SELECT S.S#, S.SNAME, S.CITY
FROM S;
В этом представлении задаются данные, которым будут предоставлены некоторые привилегии. А само предоставление привилегий задается с помощью директивы GRANT:
GRANT SELECT ON EX1 Jacques, Anne, Charley ;
Здесь следует указать на одно явное различие между языком SQL и гипотетической схемой, описанной в разделе 15.3. Поскольку правила безопасности заданы на основе директивы GRANT, а не с помощью CREATE RULE, этим правилам в SQL не присваиваются имена. (Хотя в стандарте языка SQL правилам целостности, наоборот, предусмотрено присвоение имен. Подробнее это описано в главе 16.)
2. CREATE VIEW EX2 AS
SELECT S.S#, S.SHAME, S.STATUS, S.CITY
FROM S
WHERE S.CITY = 'Paris' ;
Соответствующее предоставление привилегий задается с помощью следующей директивы GRANT:
GRANT SELECT, INSERT, UPDATE ( SNAME, STATUS ), DELETE ON EX2 TO Dan, Misha ;
3. CREATE VIEW EX3 AS
SELECT S.S#, S.SNAME, S.STATUS, S.CITY
FROM S
WHERE EXISTS
( SELECT * FROM SP WHERE EXISTS
( SELECT * FROM P
WHERE S.S# = SP.S#
AND SP.P# = P.P#
AND P.CITY = 'Rone') ) ;
Соответствующее предоставление привилегий задается с помощью приведенной ниже директивы GRANT:
GRANT SELECT ON EX3 ТО Giovanni ;
4. CREATE VIEW EX4 AS
SELECT S.S#, S.SNAME
FROM S
WHERE S.STATUS > 50 ;
Соответствующее предоставление привилегий задается с помощью директивы GRANT:
GRANT SELECT ON EX4 TO Judy, Paul ;
5. CREATE VIEW SSQ AS
SELECT S.S#, ( SELECT SUM (SP.QTY)
FROM SP
WHERE SP.S# = S.S# ) AS SQ
FROM S;
Соответствующее предоставление привилегий задается с помощью директивы GRANT:
GRANT SELECT ON SSQ TO Fidel ;
Как показано в этих примерах, механизм представлений языка SQL предлагает важные средства "бесплатного" обеспечения мер безопасности ("бесплатного" потому, что этот механизм уже содержится в данной системе и предназначен совсем для других целей). Однако более существенно то, что многочисленные проверки привилегий (даже зависящие от конкретного значения) могут быть выполнены со значительным выигрышем в производительности еще на этапе компиляции, а не во время исполнения. Тем не менее, подход на основе использования представлений для обеспечения безопасности не очень гибок, поскольку некоторым пользователям в одно и то же время могут потребоваться совершенно разные привилегии для разных подмножеств одной и той же таблицы. Например, можно представить структуру приложения, в которой предполагается просматривать и распечатывать данные о товарах из Лондона, а также разрешается при просмотре обновлять в ней некоторые данные (например, только о красных товарах).
Директивы GRANT и REVOKE
Механизм представлений языка SQL позволяет различными способами разделить базу данных на части таким образом, чтобы очень важная информация была скрыта от несанкционированных пользователей. Однако этот режим задается не с помощью параметров операций, на основе которых санкционированные пользователи выполняют те или иные действия с заданной частью данных. Эта функция (как было показано выше) выполняется с помощью директивы GRANT.
Обратите внимание, что создателю любого объекта автоматически предоставляются все привилегии в отношении этого объекта. Например, создателю таблицы В автоматически разрешается выбирать (SELECT), вставлять (INSERT), обновлять (UPDATE), удалять (DELETE) и ссылаться (REFERENCES) на таблицу В (ниже эти привилегии разъясняются подробнее). Более того, эти привилегии в каждом случае даются "с предоставлением санкции", т.е. они могут быть предоставлены какому-нибудь другому пользователю.
Ниже приводится синтаксис утверждения GRANT:
GRANT список_привилегий_через_запятую on объект TO список_пользователей_через_запятую
[WITH GRANT OPTION ] ;
Пояснения:
• Среди допустимых привилегий могут содержаться операции использования (USAGE), выбора (SELECT), вставки (INSERT), обновления (UPDATE), удаления (DELETE) и ссылки (REFERENCES). Привилегия USAGE необходима для указания использования некоторого заданного домена, привилегия REFERENCES — для обращения в ограничениях целостности к специально заданной таблице. Роль других привилегий очевидна. Однако следует отметить, что привилегии вставки (INSERT) и обновления (UPDATE) (но не привилегии выбора (SELECT), что весьма странно) могут задаваться для специально заданных столбцов.
• В качестве объекта можно использовать следующее выражение:
DOMAIN domain
[ TABLE ] table
В данном контексте — в отличие от других случаев, встречающихся в языке SQL, — ключевое слово TABLE относится как к представлениям, так и к таблицам.
• Список пользователей, разделенных запятыми, может быть заменен ключевым словом PUBLIC, которое означает всех пользователей, известных системе.
• Если задана директива WITH GRANT OPTION, это значит, что указанные пользователи наделены особыми полномочиями для заданного объекта — правом предоставления полномочий. Это, в свою очередь, означает, что для работы с данным объектом они могут наделять полномочиями других пользователей. Конечно, директива WITH GRANT OPTION может быть задана, только если пользователь, задающий утверждение GRANT, обладает необходимыми полномочиями.
Если пользователь А наделяет некоторыми полномочиями другого пользователя В, то впоследствии он может отменить эти полномочия для пользователя В. Отмена полномочий выполняется с помощью директивы REVOKE с приведенным ниже синтаксисом.
REVOKE [ GRANT OPTION FOR ] cпиcoк_пpивилегий_чepeз_зaпятyю
ОN объект
FRОM список_ пользователей_ через_ запятую параметр;
Здесь директива GRANT OPTION FOR означает, что отменяются только полномочия, назначаемые (передаваемые) другим пользователям; список привилегий и список пользователей используются так же, как и в утверждении GRANT, а в качестве параметра используется либо RESTRICT, либо CASCADE. Ниже приведены некоторые примеры использования этого выражения.
1. REVOKE SELECT CN EX1 FROM Jacques, Anne, Charley RESTRICT ;
2. REVOKE SELECT, INSERT, UPDATE (SNAME, STATUS), DELETE
ОN EX2 FROM Dan, Misha CASCADE ;
3. REVOKE SELECT ON EX3 FRОM Giovaimi RESTRICT ;
4. REVOKE SELECT ON EX4 FROM Judy, Paul CASCADE ;
5. REVOKE SELECT CN SSQ FRCM Fidel RESTRICT ;
Параметры RESTRICT и CASCADE. Допустим, что р является некоторой привилегией для некоторого объекта и пользователь A передает p пользователю B, который, в свою очередь, передает ее пользователю С. Что произойдет, если пользователь А теперь отменит привилегию р для пользователя B? Если эта отмена состоится, то привилегия р для пользователя С останется "покинутой", поскольку она была производной от привилегии р пользователя В, который уже не обладает ею. Основное предназначение параметров RESTRICT и CASCADE заключается в предотвращении ситуаций с возникновением покинутых привилегий. Благодаря заданию параметра RESTRICT не разрешается выполнять операцию отмены привилегии, если она приводит к появлению покинутой привилегии. Параметр CASCADE указывает на последовательную отмену всех привилегий, производных от данной.
Наконец, при удалении домена, таблицы, столбца или представления автоматически будут удалены также и все привилегии в отношении этих объектов со стороны всех пользователей.