Главная » SQL, Базы данных » СРЕДСТВА избирательного метода управления доступом ЯЗЫКА SQL

0

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

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

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

2.    CREATE VIEW LS AS

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

WHERE S, CITY = ‘London’ ;

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

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

TO   Dan, Misha ;

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

3.    CREATE VIEW SSPPO 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 = ‘Oslo’ ) ) ;

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

GRANT SELECT ON SSPPO TO Lars ;

4.    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 ;

В примере 5 из раздела 17.2 демонстрируется предоставление контекстно-зависимых полномочий. В языке SQL поддерживается несколько нуль-арных встроенных операторов (CURRENT_USER, CURRENT_DATE, CURRENT_TIME И Т.Д.), каждый из которых, поМИМО всего прочего,    может    быть     использован    и    для    определения    контекстно-зависимых представлений. (Но в  этом языке не поддерживается аналог оператора DAY (), который использовался в первоначальном варианте примера 5.) Поэтому ниже приведен немного упрощенный вариант этого примера.

CREATE VIEW S_NINE_TO_FIVE AS

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

WHERE CURRENT_TIME > TIME ’09:00:00′ AND    CURRENT_TIME < TIME ’17:00:00′

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

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

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

Как бы то ни было, приведенные выше примеры хорошо иллюстрируют тот факт, что механизм  представлений  косвенно  обеспечивает  важные  функции   защиты  данных

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

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

разрешается просматривать и распечатывать данные о деталях из Лондона и  дополнительно разрешается обновлять данные о некоторых из них (например, только о деталях красного цвета) непосредственно в процессе просмотра.

Глава 17. Защита данных     673

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

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

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

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

GRANT <privilege commalist> ON

<object>

TO <user ID

commalist> [   WITH GRANT  OPTION   ]    ;

Пояснения

1.   Допустимыми значениями параметра <privilege> могут быть ключевые  слова USAGE  (использование),  UNDER  (определение  подтаблицы),  SELECT   (выборка), INSERT   (вставка),  DELETE   (удаление),  UPDATE   (обновление),   REFERENCES (ссылка), TRIGGER (определение триггера) и  EXECUTE (выполнение). Каждая из привилегий SELECT, INSERT, UPDATE и  REFERENCES может быть определена на уровне столбца.

Примечание. Может быть также задана привилегия ALL PRIVILEGES, НО она имеет не такую простую семантику, как может показаться на первый взгляд (см. [4.20]).

■    Привилегия USAGE на тип, определяемый пользователем, требуется для ис пользования этого типа.

■    Привилегия UNDER может потребоваться, во-первых, на конкретный тип, оп ределяемый пользователем, для получения возможности создания подтипа этого типа, и, во-вторых, на конкретную таблицу, для создания подтаблицы этой таблицы (см., соответственно, главы 20 и 26).

■    Привилегии SELECT, INSERT, DELETE и UPDATE не требуют дополнительных пояснений.

■    Привилегия REFERENCES на конкретную таблицу требуется, если нужно со слаться на эту таблицу в ограничении целостности (под этим подразумевается

5 Желательно было бы также определить привилегию на создание подтаблиц (UNDER) в тех случаях, где она имеет смысл, но в стандартеSQLонанеупоминается.

любое ограничение данного типа, а не только ограничение ссылочной целостности).

■     Привилегия TRIGGER на базовую таблицу требуется для создания триггера для данной таблицы.

■     Привилегия EXECUTE на конкретную процедуру SQL требуется для вызова этой процедуры.

2.    К числу допустимых параметров с обозначения объекта < objec t> относятся TYPE

<type   name>, TABLE <table   name> и (применительно к ключевому слову EXECUTE)  определенная  конструкция, называемая  обозначением  конкретной процедуры <specific  routine   designator>, описание которой выходит за рамки настоящей книги.

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

3.    Параметр с обозначением разделенного запятыми списка идентификаторов поль зователей <user  ID  commalist> может быть заменен специальным ключевым словом PUBLIC, которое обозначает всех пользователей, известных системе.

Примечание. Язык SQL поддерживает также определяемые пользователем роли; в качестве примера можно указать роль ACCOUNTING, под которой подразумеваются все пользователи бухгалтерского отдела. Любой роли после ее создания могут быть назначены привилегии, по такому же принципу, как если бы она представляла собой обычный идентификатор пользователя.  Кроме того, сами роли могут быть предоставлены, как и привилегии,  либо  идентификаторам пользователей, либо другим ролям. Иными словами, в языке SQL роли выполняют функции механизма поддержки групп пользователей (см. раздел 17.1).

4.    Ключевое слово WITH GRANT OPTION, если оно задано, обозначает, что указанная привилегия на указанный объект предоставлена указанному пользователю с пра вом предоставления другому пользователю; это означает, что, как было описано выше, пользователь, имеющий такое право, может предоставлять привилегии на данный объект другому пользователю (пользователям). Разумеется, пользователь, применяющий оператор GRANT, может задавать в нем ключевое слово WITH GRANT OPTION лишь при том условии, что он сам обладает необходимыми привилегиями.

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

REVOKE [ GRANT OPTION FOR ] <privilege commalist>

ON <object> FROM <user ID comma.list> <behavior>

;

Здесь ключевое слово GRANT OPTION FOR означает, что отменяется только право передачи указанных привилегий, предоставленное ранее этим пользователям. Значения

Глава 17. Защита данных     675

параметров  <privilege  commalist>,  <object>  и  <user  ID  commalist>  аналогичны значениям параметров оператора GRANT. Значениями параметра  <behavior> могут быть ключевые слова RESTRICT (ОТКЛОНИТЬ В случае нарушения) и CASCADE (выполнить каскадно)  (как  обычно).  Ниже  приведены  некоторые  примеры  использования  этого оператора.

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

2.          REVOKE SELECT, DELETE, UPDATE ( SNAME, STATUS ) ON LS FROM Dan, Misha CASCADE ;

3.          REVOKE SELECT ON SSPPO FROM Lars RESTRICT ;

4.          REVOKE SELECT ON SSQ FROM Fidel RESTRICT ;

Рассмотрим назначение ключевых слов RESTRICT и CASCADE. Допустим, что р является некоторой привилегией для некоторого объекта и пользователь А  предоставляет привилегию р пользователю в, который в свою очередь предоставляет ее пользователю С. Что произойдет, если теперь пользователь А отменит привилегию р для пользователя в? На данный момент предположим, что оператор REVOKE выполняется успешно. Если эта отмена состоится, то привилегия р у пользователя С останется зависшей (orphaned), поскольку она была производной  от  привилегии р пользователя в, который уже ею не обладает. Основное назначение ключевых слов RESTRICT И CASCADE СОСТОИТ В предотвращении ситуаций возникновения зависших привилегий. При задании ключевого слова RESTRICT запрещается выполнять операцию отмены привилегии, если она приводит к появлению зависшей привилегии. Ключевое слово CASCADE указывает на необходимость каскадной отмены всех привилегий, производных от отменяемой.

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

17.2.     РЕЗЮМЕ

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

Защита обеспечивается подсистемой защиты СУБД, проверяющей соответствие  всех поступающих запросов существующим ограничениям защиты (или чаще всего полномочиям), которые хранятся в системном каталоге. Сначала были рассмотрены избирательные схемы защиты, в которых доступ к конкретному объекту определялся владельцем объекта по своему усмотрению. Для каждого ограничения безопасности в избирательной схеме задаются имя, множество привилегий (RETRIEVE, INSERT и т.д.), соответствующая переменная отношения (т.е. данные, к которым применимы указанные ограничения) и множество  пользователей. Такие правила могут применяться для организации управления как   зависящего,  так  и  не  зависящего  от  конкретных  значений,  а  также   для статистически  обобщенного  и  контекстно-зависимого  управления.  Для  регистрации попыток нарушения защиты может использоваться контрольный журнал. В данной главе было представлено

краткое описание метода реализации избирательной схемы защиты на основе механизма модификации запроса. Впервые эта технология была применена в прототипе системы Ingres с использованием средств языка QUEL.

Далее кратко рассматривались методы мандатного управления, согласно которым каждый объект должен обладать некоторым классификационным уровнем, а каждому пользователю должен быть присвоен определенный уровень допуска. Помимо описания правил доступа для такой схемы, кратко рассматривалась классификация мер безопасности, регламентированная  Министерством обороны США в  "Оранжевой" и "Сиреневой" книгах, а также кратко приводились идеи создания многоуровневых переменных отношения и методы поликонкретизации.

Затем обсуждались особенности работы со статистическими базами данных.  Статистической называется база данных, которая содержит большое количество  отдельных конфиденциальных сведений и пользователям которой может  предоставляться только некоторая статистически обобщенная информация. Было  показано, что защита такой базы данных легко может быть нарушена с помощью специальных выражений — средств слежения. (Этот факт должен вызывать определенную тревогу в связи с возрастающим интересом к хранилищам данных, подробное описание которых приводится в главе 22.)

Также были описаны методы шифрования данных с использованием методов подстановки и перестановки, приведены разъяснения в отношении стандартов шифрования данных Data Encryption Standard (DES) и Advanced Encryption  Standard (AES), а также кратко рассмотрены методы шифрования с помощью открытых ключей. В частности, был приведен простой пример использования схемы RSA на основе ключей, представляющих

собой  простые  числа.  Кроме  того,  была  описана  концепция  применения  цифровых подписей.

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

В заключение, вероятно, стоит отметить, что от СУБД, предоставляющей  большое количество функций защиты, каждую из которых можно легко  преодолеть, будет мало пользы. Например, в СУБД DB2 данные базы физически хранятся в файлах операционной системы. Следовательно, любые механизмы защиты в системе DB2 были бы совершенно бесполезны, если бы было возможно получить доступ к этим файлам с помощью

обычной программы, использующей обычные средства операционной системы. Поэтому СУБД DB2 согласованно взаимодействует с другими параллельно существующими системами (например, с базовой операционной системой), что дает ей гарантии общей защищенности системы. Подробное изложение этого  аспекта защиты выходит за рамки данной главы, однако указанную особенность все же стоило упомянуть.

Источник: Дейт К. Дж., Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 1328 с.: ил. — Парал. тит. англ.

По теме:

  • Комментарии