Скачиваний:
38
Добавлен:
01.04.2014
Размер:
539.65 Кб
Скачать

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 указывает на последо­вательную отмену всех привилегий, производных от данной.

Наконец, при удалении домена, таблицы, столбца или представления автоматиче­ски будут удалены также и все привилегии в отношении этих объектов со стороны всех пользователей.

Соседние файлы в папке Дейтл Введ в БД