Безопасность баз данных в вычислительных сетях 6.1. Обеспечение конфиденциальностии целостности баз данных Известны два способа защиты данных в сетевых базах. Первый, наиболее очевидный способ заключается в том, чтобы запретить доступ к данным тем пользователям сети, которые не имеют права доступа к ним. Управление доступом позволяет регулировать просмотр, изменение и удаление данных и программ. Подобное управление предотвращает случайное или преднамеренное обнаружение, изменение или уничтожение записей и наборов данных. Второй, также важный способ защиты баз данных в ВС заключается в обеспечении гарантийного доступа ко всем необходимым данным тем пользователям сети, которые правильно используют возможности и права доступа. Эффективность механизма управления доступом для защиты данных в ВС зависит от выполнения трех предположений. 1. Правильная идентификация пользователя с целью запретить использование СУБД на основе прав другого пользователя. Схемы идентификации используют пароли как наиболее распространненый способ достижения этой цели. 2. Злоумышленники не должны получать доступа к разделам базы данных, если даже они выкрали магнитные ленты или пакеты дисков или осуществляли прослушивание линий связи. Обычно в качесте механизма защиты для решения этой проблемы используется шифрование. Наряду со стандартными проблемами шифрования - выбором соответствующего алгоритма реализации протокола защиты и управления - существует также проблема выполнения операций над шифрованными данными. При получении шифрованных данных пользователь должен из расшифровать, затем выполнить необходимые действия и наконец, снова зашифровать. Кроме того, в распределенных сетевых базах данных на разных рабочих станциях могут применяться различные алгоритмы шифрования и криптографические ключи. Другой путь обеспечения по крайней мере целостности наборов данных заключается в использовании контрольных сумм. 3. Информацию о правах доступа субъектов необходимо тщательно охранять: имеется в виду информация, которая определяет доступ каждой программы к объектам системы. Категории секретности можно использовать в базах данных в том случае, если СУБД является отправителем, а пользователь - получателем. Пользователь может получить доступ к данным и только тогда, когда он имеет такую же или более высокую категорию секретности, чем данные. В этом случае база данных (вся или некоторые ее части) должна иметь некоторый набор атрибутов для указания категории секретности. Простейшие механизмы передачи информации обычно используют только два класса информации в базах данных: конфиденциальную и неконфиденциальную, разрешают любую передачу, кроме передачи из категории конфиденциально в категорию неконфиденциально. Правительственные и военные ВС имеют более сложные правила установления категорий конфиденциальности информации для целей передачи. Эти правила определяют стратегию многоуровневой передачи и используют более чем две категории секретности, например: для служебного пользования, секретно и совершенно секретно. Другая важная проблема при работе с базами данных- обеспечение целостности данных. Целостность данных может быть определена как система гарантированной сохранности информации в базе данных при отказах аппаратуры или сбоях программ (защита от потери данных), а также обеспечение согласованности информации при попытках ее искажения (защита от искажения данных). 6.1.1. Средства управления данными Средства управления данными в ВС разрешают пользователю управлять доступом других пользователей к его данным и контролировать неприкосновенность последних. Средства защиты могут также обеспечивать выполнение групповых операций (транзакций) и осуществлять восстановление БД. В большинстве сетевых СУБД установлена ответственность каждого пользователя за управление доступом к созданному им объекту. Когда пользователь создает некоторый объект (представление данных) и определяет операции отношения над ним, то он должен в полном объеме контролировать выполняемые действия. (Если задано представление, то права доступа к нему обычно ограничены уже имеющимися полномочиями на выполнение определенных операций). Пользователь может предоставить право доступа к объектам и операциям другому пользователю. В большинстве сетевых механизмов управления доступом допускаются следующие атрибуты доступа: READ чтение INSERT вставка DELETE удаление UPDATE обновление EXPAND расширение IMAGE создание образа CONTROL управление Вместе стем пользователь может передать другому пользователю права установки атрибутов доступа. Однако это может сделать только пользователь, имеющий соответствующий атрибут доступа. Ключевое слово PUBLIC (общедоступный) может быть использовано вместо списка пользователей, если атрибут разрешен всем пользователям. Фраза ALL RIGHTS (все права) может быть использована вместо списка атрибутов в операторе GRANT (предоставить). Если список атрибутов отсутствует, то по умолчанию устанавливается атрибут READ. Атрибут доступа может быть как установлен, так и снят (отменен). Он удаляется из списка атрибутов того пользователя, который его установил, и всех пользователей, которым данный атрибут был передан этим пользователем, исключая тех, кому удаляемый атрибут был установлен другим пользователем. Процесс отмены атрибута может также иметь и другие особенности. В некоторых сетевых СУБД пользователю, имеющему атрибут CONTROL, разрешается формировать утверждение о целостности. Утверждение - логический предикат, который может принимать значение TRUE (истина) или FALSE (ложь). При выполнении оператора ASSERT (утвердить) система проверяет текущее значение предиката. Если предикат равен FALSE, утверждение игнорируется; если же значение предиката ТRUE, система с этого момента времени вводит в действие утверждение по отношению ко всем будущим изменениям в БД. Каждому утверждению пользователь присваивает имя. Если оператор вставки, удаления или обновления нарушает утверждение, он игнорируется и пользователю возвращается код нарушения вместе с именем (именами) нарушенного утверждения (утверждений). Утверждение простейшего вида относится к отдельному отношению и распространяется на каждый элемент отношения. Как и в запросах, утверждению может быть присвоена метка, которая используется в блоках, связанных с утверждением, для указания некоторого свойства, относящегося ко всем элементам отношения, на которые распространяется утверждение. Существуют утверждения, предназначенные для создания общего оператора для одного и более отношений. Утверждение этого вида не требуют опции ON, поскольку отношения идентифицируются самим утверждением. Описанные утверждения являются статистическими. Другой класс утверждений связан с преобразованием в базе данных. утверждения этого типа должны устанавливать условия, при которых возможны вставка, удаление или обновление элементов отношения. При выполнении действий утверждения проверяются на допустимость использования. Преобразование может иметь атрибуты OLD (обновленный) или NEW(прежний), которые характеризует элемент до и после преобразования. Если одиночный оператор СУБД предназначен для обновления нескольких элементов, утверждение проверяется для каждого элемента и оператор игнорируется, если утверждение не выполняется. Утверждения, используемые в преобразованиях, всегда относятся к отдельным элементам, а не к их совокупности. Например, в преобразование нельзя включить утверждение, которое позволяло бы установить, что новый средний доход служащих стал больше прежнего. Общее правило использования нулевых величин при проверке утверждения заключается в том, что наличие нулевой величины никогда не должно приводить к выполнению утверждения, если оно ложно, и никогда не отвергать утверждения, если оно истинно. Предикат утверждения чаще всего задается в виде логического условия, вычисляемого с помощью таблицы истинности. Утверждение принимается, если результат вычисления предиката равен RTUE или ?, и отвергается, если результат равен FALSE. Напимер, утверждение, что нет среднего дохода более 20000 долл., не отвергается в случае нулевого дохода. Исключение составляют те утверждения, в которых явно используются нулевые величины. В таких утверждениях нулевая величина расматривается, как и любая другая. Пользователь, формирующий утверждение, может установить опцию, чтобы проверка утверждения выполнялась сразу. Для этого в префикс утверждения включается опция IMMEDIATE (немедленно); в этом случае утверждение проверяется после завершения выполнения каждого оператора. Поскольку утверждения в преобразованиях, использующие опции OLD и NEW, выполняются поэлементно, то они всегда вступают в действие немедленно, а не по окончании выполнения операции. Во время выполнения операций пользователь с помощью оператора SAVE (имя-контрольной-точки) может объявить контрольную точку. При выполнении одной операции может быть объявлено несколько контрольных точек. Пользователь всегда может отменить внесенные в базу данных изменения после некоторой контрольной точки путем использования оператора RESTORE (имя-контрольной-точки). Если аргумент имя-контрольной-точки в операторе RESTORE отсутствует, база данных восстанавливает свое состояние на момент начала текущей операции. Оператор RESTORE не оказывает влияния на изменения, всененные другими пользователями. Для того чтобы упростить поддержку целостности базы данных, пользователь может определить в некоторой отдельной таблице переключатель, который используется при выполнении операций (READ, INSERT, DELETE, UPDATE). Переключатель, содержащий один или несколько операторов управления, выполняется непосредственно после описанных действий пользователя. Если оператор предназначен для выполнения операций обновления над несколькими элементами, это реализуется поэлементно. Переключатели всегда выполняются немедленно и не могут быть отложены до окончания операции. В теле переключателя могут использоваться опции OLD и NEW, указывающие на прежние и обновленные величины. С элементом, вызываемым переключателем, может быть связана метка, которая используется переключателем. Вместе с этим оператор, входящий в состав переключателя, может содержать предложение IF, определяющее действия в зависимости от некоторого условия. Допускается связь одиночного оператора обновления с несколькими переключателями и утверждениями. В этом случае переключатели выполняются в некотором, определенном в системе, порядке. Поскольку переключатели выполняются поэлементно, одиночный оператор может вызвать выполнение различных переключателей, выполняемых после обновления каждого элемента. Если при выполнении переключателя вызываются другие переключатели, эти переключатели (второго уровня) будут выполнены прежде, чем будет продолжено выполнение начального набора переключателей. Разработчик переключателя должен отвечать за то, чтобы при выполнении переключателя не возникло зацикливания. Наконец, когда первоначальный оператор и переключатели всех уровней выполнены, проверяется набор связанных утверждений. Если какое-либо утверждение нарушается, оператор и все переключатели (или текущая операция и все переключатели) игнорируются. Утверждения в преобразовании, использующие опции OLD и NEW, всегда выполняются, как и переключатели, поэлементно. При этом сравнении величины до и после обновления и в зависимости от внесенных изменений выполняются все необходимые переключатели. Пользователь с правом CONTROL (управление) может прерывать выполнение утверждения или переключателя. Переключатели рассматриваются как составная часть операции и при отмене операции отменяются также все соответствующие переключатели. Однако переключатели и утверждения рассматриваются с позиций разработчика, а не с позиций пользователя. Фактически разработчик утверждения или переключателя является пользователем с очень широкими правами. Он может, например, определить переключатель так, что он будет вносить изменения в таблицу незаметно для пользователеля, действия которого вызвали выполнение этого переключателя. Возможен еще один способ использования переключателей. При формировании отношения его можно организовать так, что вместо изменения отношения будетвыполняться сложный набор действий. Вместо использования переключателя разработчик может написать программу, которая будет производить обновление отношения в зависимости от вводимых параметров путем выполнения соответствующих действий. После этого разработчик, предоставляя пользователям право выполнения программы, на самом деле даст им возможность владения правом UPDATE (обновление) по отношению к данному утверждению.