Скачиваний:
82
Добавлен:
02.05.2014
Размер:
2.28 Mб
Скачать

16.6. Средства языка sql

В действующем стандарте языка SQL предусматривается поддержка только избира- тельного метода управления доступом. Она строится на основе двух более или менее не- зависимых функций языка SQL. Первая из них является механизмом представлений, который (как говорилось выше, в главе 8) может быть использован для сокрытия важных данных от несанкционированных пользователей. Вторая функция называется подсисте- мой полномочий и позволяет одним пользователям, обладающим определенными пра- вами доступа, избирательно и динамично предоставлять эти полномочия другим пользо- вателям, а также отменять предоставленные ими полномочия в случае необходимости. Ниже эти функции языка SQL обсуждаются более подробно.

Представления и защита данных

Продемонстрируем использование представлений для организации защиты данных с помощью записи на языке SQL примеров 2-4 из раздела 16.2.

2. CREATE VIEW LS AS

SELECT S.S#, S.SNAME, S.STATUS, S.CITY FROM S

WHERE S, CITY = 'London' ?

Это представление определяет данные, по отношению к которым будут предостав- лены некоторые привилегии. Само же предоставление привилегий осуществляется с помощью операторов GRANT.

GRANT SELECT, UPDATE ( SNAME, STATUS ), DELETE ON LS

TO Dan, Misha ;

Здесь следует отметить, что, поскольку привилегии задаются с помощью оператора GRANT, а не с помощью гипотетического оператора CREATE AUTHORITY, привилегиям в языке SQL имена не присваиваются. (Хотя для ограничений целостности стан- дарт языка SQL, наоборот, предусматривает присвоение имен. Подробности при- водятся в главе 8.)

3. CREATE VIEW SSPPR 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.Si AND SP.P# = P.Pi AND P.CITY = 'Rome' ) ) ;

Собственно предоставление привилегий выполняется с помощью следующего опе- ратора GRANT.

GRANT SELECT ON SSPPR TO Giovanni ;

4. CREATE VIEW SSQ AS

SELECT S.S#, ( SELECT SUM (SP.QTY) FROM SP

WHERE SP.Sf = S.Sf ) AS SQ

FROM S ;

Собственно предоставление привилегий выполняется с помощью следующего опе- ратора GRANT.

GRANT SELECT ON SSQ TO Fidel ;

В примере 5 из раздела 16.2 демонстрируется предоставление контекстно-зависимых полномочий. В языке SQL поддерживается несколько не имеющих аргументов встроен- ных функций: CURRENTJISER, CURRENT_DATE, CURRENTJIIME и т.д., каждая из которых, по- мимо всего прочего, может быть использована и для определения контекстно-зависимых представлений. (Обратите внимание, что в языке SQL не поддерживается аналог опера- тора DAY(), используемого в исходном варианте примера 5.) Ниже приводится пример создания такого представления.

CREATE VIEW S NINE_TO_FIVE AS

SELECT~S.Si, S.NAME, S.STATUS, S.CITY FROM S

WHERE CURRENTJTIME > TIME '09:00:00' AND CURRENTJTIME < TIME '17:00:00'

Соответствующий оператор GRANT выглядит так.

GRANT SELECT, UPDATE ( STATUS ) ON S_NINE_TO_FIVE TO Purchasing ;

Обратите внимание, что представление S_NINE_TO_FIVE демонстрирует очень странный тип представлений, так как его содержимое меняется со временем, причем даже в том случае, когда данные в базе вовсе не изменялись. Более того, представле- ние, в определение которого встроен оператор CURRENT_USER, может (а точнее, скорее всего, обязательно будет) иметь разное содержание для различных пользователей. Та- кие "представления" действительно отличаются от традиционных представлений, по- скольку по сути они являются параметризованными. Предпочтительнее было бы, по крайней мере концептуально, разрешить пользователям определять собственные (потенциально параметризованные) функции, оперирующие значениями в виде пере- менных-отношений, и рассматривать "представления", подобные S_NINE_TO_FIVE, в качестве особых случаев таких функций.

Как бы там ни было, приведенные выше примеры хорошо иллюстрируют тот факт, что механизм представлений косвенно обеспечивает важные функции защиты данных ("косвенно" потому, что этот механизм включен в систему для достижения совсем дру- гих целей). Более того, значительная часть процедуры контроля прав доступа (в том чис- ле зависящая от конкретных значений) может быть выполнена еще на этапе компиляции, а не во время выполнения, что позволяет достичь существенного выигрыша в произво- дительности. Тем не менее подходу с использованием представлений для организации защиты также свойственны определенные недостатки. В частности, некоторому пользо- вателю в одно и то же время могут потребоваться разные права доступа в отношении разных подмножеств данных одной и той же таблицы. В качестве примера можно при- вести сложность реализации приложения, в котором пользователю разрешается про- сматривать и распечатывать данные о деталях из Лондона, и дополнительно разрешается обновлять данные о некоторых из них (например, только о красных деталях) непосредст- венно в процессе просмотра.

Операторы GRANT и REVOKE

Механизм представлений языка SQL позволяет концептуально разделять базу дан- ных на части таким образом, чтобы важная информация была скрыта от несанкциони- рованных пользователей. Однако этот механизм не позволяет указывать тот набор операций, которые разрешается применять в отношении данных частей санкциониро- ванным пользователям. Подобная задача (как было показано выше) решается с помо- щью оператора GRANT.

Обратите внимание, что в языке SQL создателю любого объекта автоматически пре- доставляются все привилегии в отношении этого объекта. Например, создателю таблицы Т автоматически разрешается выбирать (SELECT), вставлять (INSERT), обновлять (UPDATE), удалять (DELETE) таблицу Т и ссылаться (REFERENCES) на нее (ниже эти привилегии разъ- ясняются подробнее). Более того, привилегии в каждом случае даются "с правом их пе- редачи", т.е. обладатель некоторых полномочий в подобном случае имеет право предос- тавить их и другим пользователям.

Ниже приводится общий синтаксис оператора GRANT.

GRANT <список привилегий^ ON <объекч>

ТО <список идентификаторов пользователей [ WITH GRANT OPTION ] ;

Пояснения

* После добавления в стандарт в 1996 году понятия "постоянно хранимые модули" (Persistent Stored Modules PSM) появилась новая привилегия EXECUTE (выполнение).


■ Допустимыми значениями параметра кспнсок привилегии могут быть ключе- вые слова USAGE (использование), SELECT (выборка), INSERT (вставка), UPDATE (обновление), DELETE (удаление) и REFERENCES (ссылка)5. Привилегия USAGE не- обходима для получения права использования некоторого конкретного SQL- домена, привилегия REFERENCES — для получения права обращаться к указанной таблице при задании ограничений целостности. Назначение остальных привиле-

гий очевидно. Однако следует отметить, что привилегии INSERT и UPDATE (но не привилегия SELECT, что весьма странно) могут задаваться для конкретных ука- занных столбцов таблиц.

Замечание. Также допустимо ключевое слово ALL PRIVILEGES (все привилегии), но семантика его использования не столь проста, как кажется [4.19].

■ В качестве значения параметра <о6ъект> может использоваться выражение DOMAIN <имя домена> или выражение TABLE <иш таблице.

Замечание. В данном контексте— в отличие от большинства других случаев — ключевое слово TABLE (которое на самом деле не является обязательным) относит- ся как к представлениям, так и к базовым таблицам.

  • Значением параметра <список идентификаторов пользователей> может быть ключевое слово PUBLIC, обозначающее всех пользователей, которые известны системе.

  • Если задана опция WITH GRANT OPTION, значит, перечисленные пользователи на- деляются особыми полномочиями в отношении указанного объекта— правом передачи полномочий. Это означает, что им разрешается предоставлять такие же полномочия другим пользователям. Безусловно, опция WITH GRANT OPTION может указываться только в том случае, когда задающий оператор GRANT пользователь сам обладает необходимыми полномочиями.

Если пользователь А наделяет некоторыми полномочиями пользователя В, то впо- следствии он может отменить эти полномочия пользователя В. Отмена полномочий вы- полняется с помощью оператора REVOKE с приведенным ниже синтаксисом.

REVOKE [ GRANT OPTION FOR j <список привилегий^ ON <об5ек!Г>

FROM <список идентификаторов пользователей <опция> ;

Здесь фраза GRANT OPTION FOR означает, что отменяется только право передачи ука- занных привилегий, предоставленное ранее этим пользователям. Значения параметров <список привилегий^, <о6ъект> и <список идентификаторов пользователей аналогич- ны значениям параметра оператора GRANT. Значениями параметра <опция> могут быть ключевые слова RESTRICT (отклонить) и CASCADE (каскадно). Ниже приведены некоторые примеры использования этого оператора.

  1. REVOKE SELECT ON S FROM Jacques, Anne, Charley RESTRICT ;

  2. REVOKE SELECT, INSERT, UPDATE (SNAME, STATUS), DELETE

ON LS FROM Dan, Misha CASCADE ;

  1. REVOKE SELECT ON SSPPR FROM Giovanni RESTRICT ;

  2. REVOKE SELECT ON SSQ FROM Fidel RESTRICT ;

Рассмотрим назначение ключевых слов RESTRICT и CASCADE. Допустим, что р являет- ся некоторой привилегией для некоторого объекта и пользователь А предоставляет при- вилегию р пользователю В, который, в свою очередь, предоставляет ее пользователю С.

Что произойдет, если теперь пользователь А отменит привилегию р для пользователя В? Если эта отмена состоится, то привилегия р у пользователя С останется "покинутой", по- скольку она была производной от привилегии р пользователя В, который уже не обладает ею. Основное назначение ключевых слов RESTRICT и CASCADE состоит в предотвращении ситуаций возникновения покинутых привилегий. При задании ключевого слова RESTRICT запрещается выполнять операцию отмены привилегии, если она приводит к появлению покинутой привилегии. Ключевое слово CASCADE указывает на необходимость последо- вательной отмены всех привилегий, производных от отменяемой.

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

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]