понедельник, 10 января 2011 г.

ISSP \ Домен 09. Безопасность приложений. Часть 2

В этой части рассмотрены следующие вопросы:
  • Управление базами данных
  • Программное обеспечение для управления базами данных
  • Модели баз данных
  • Интерфейсы программирования баз данных
  • Компоненты реляционной базы данных
  • Словарь данных
  • Первичные и внешние ключи


Базы данных давно используются для хранения информации, представляющей ценность для компаний, в том числе являющейся интеллектуальной собственностью. Базы данных обычно работают в среде, скрытой ото всех, кроме сетевых администраторов и администраторов баз данных. Чем меньше людей знают о базах данных, тем лучше. Пользователи обычно работают с базами данных не напрямую, а через клиентский интерфейс, их действия ограничены в целях обеспечения конфиденциальности, целостности и доступности данных, хранящихся в базе данных, а также структуры самой базы данных.
ПРИМЕЧАНИЕ. Система управления базами данных (СУБД) представляет собой набор программ, используемых для управления большими объемами структурированных данных и способных выполнять запросы от различных категорий пользователей. Также эти программы позволяют управлять настройками безопасности базы данных.
Риски возрастают, если компания подключает свою сеть к Интернет, разрешает удаленным пользователям доступ во внутреннюю сеть, предоставляет все больше прав доступа внешним субъектам. Эти действия несут большой риск, поскольку они могут стать косвенной причиной получения злоумышленником доступа к серверу базы данных, находящемуся во внутренней сети компании. Раньше информация клиентов компании хранилась в базах данных, к которым имели доступ только сотрудники компании, а не сами клиенты. В наше время многие компании позволяют клиентам получать доступ к хранящейся в базах данных информации, через веб-браузер. Веб-браузер устанавливает соединение с промежуточным программным обеспечением (middleware) компании, которое соединяется с сервером базы данных. Это повышает сложность системы, а доступ к базам данных организуется новым способом.

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

Такой доступ к базе данных может быть ограничен администратором с помощью средств контроля доступа и предоставляться только нескольким разрешенным ролям. При этом каждой роли будут даны определенные права и разрешения, а затем эти роли будут назначены клиентам и сотрудникам. Пользователь, которому не назначена ни одна из таких ролей, не имеет доступа к базе данных. Таким образом, если злоумышленник сможет преодолеть защиту межсетевого экрана и других механизмов защиты периметра сети, и получит возможность выполнять запросы к базе данных, то при условии, что у него не будет учетной записи, которой назначена одна из таких ролей, база данных все еще будет находиться в безопасности. Этот процесс упрощает управление доступом и гарантирует, что ни один пользователь (в т.ч. злоумышленник) не сможет получить доступ к базе данных напрямую, а только с помощью учентной записи, которой назначена соответствующая роль. Рисунок 9-2 иллюстрирует эту концепцию.

Рисунок 9-2. Один из вариантов обеспечения безопасности базы данных использует роли


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

База данных предоставляет структуру для хранения собранных данных. Сама эта структура может отличаться для каждой реальной базы данных, поскольку различные компании и приложения работают с различными данными, типами данных, им необходимо выполнять различные действия с информацией. Различные приложения используют различные способы обработки данных, в различных базах данных устанавливаются различные отношения между данными, базы данных могут работать на различных платформах, к ним могут предъявляться различные эксплуатационные требования, а также требования по обеспечению безопасности. Однако любая база данных должна иметь следующие характеристики:
  • Обеспечивать централизацию, позволяя не организовывать хранение данные на нескольких различных серверах по всей сети
  • Позволять упростить процедуры резервного копирования
  • Обеспечивать транзакционную устойчивость (transaction persistence)
  • Позволять организовать работу более упорядоченно, поскольку все данные хранятся и сопровождаются в одном централизованном месте
  • Обеспечивать отказоустойчивость и возможности для восстановления
  • Позволять множеству пользователей совместно использовать данные
  • Предоставлять механизмы безопасности, которые осуществляют контроль целостности, управление доступом, обеспечивают необходимый уровень конфиденциальности
ПРИМЕЧАНИЕ. Транзакционная устойчивость (transaction persistence) означает, что реализованные в базе данных процедуры, выполняющие транзакции, являются надежными и проверенными. При использовании этих процедур, уровень безопасности базы данных не должен изменяться после выполнения транзакции, должна обеспечиваться целостность транзакций.
Поскольку потребности и требования к базам данных у различных компаний существенно различаются, могут использоваться различные модели данных, позволяющие увязать структуру данных с потребностями компаний и их бизнес-процессов.


Модель базы данных определяет отношения между различными элементами данных, указывает, каким образом может осуществляться доступ к данным, определяет допустимые операции, предлагаемый тип целостности, а также определяет, каким образом будут организованы данные. Модель дает формальный способ представления данных в концептуальной форме и предоставляет необходимые средства для работы с данными, хранящимися в базе данных. Базы данных могут быть реализованы на основе следующих моделей:
  • Реляционная
  • Иерархическая
  • Сетевая
  • Объектно-ориентированная
  • Объектно-реляционная
Реляционная модель базы данных (relational database model) для хранения и организации информации использует атрибуты (столбцы) и записи (строки) (см. Рисунок 9-3). Реляционная модель базы данных в настоящее время является наиболее широко используемой моделью. Реляционная база данных состоит из двумерных таблиц, каждая таблица содержит уникальные строки, столбцы и ячейки (пересечение строки и столбца). Каждая ячейка содержит только одно значение данных, представляющее собой конкретное значение атрибута соответствующей записи. Элементы данных связаны отношениями. Отношения между элементами данных предоставляют основу для организации данных. Первичный ключ (primary key) – это поле, которое содержит уникальное значение, не повторяющееся в других записях, и позволяющее связать все данные в рамках одной записи в одно уникальное значение. Например, в таблице на Рисунке 9-3, первичными ключами являются продукты G345 и G978. Когда приложение или другая запись ссылается на этот первичный ключ, в действительности она ссылается на все данные в рамках этой строки.

Рисунок 9-3. Реляционная база данных хранит данные в двумерных таблицах

Иерархическая модель базы данных (hierarchial data model) (см. Рисунок 9-4) объединяет связанные записи и поля в логическую древовидную структуру. Эта структура и взаимосвязи между элементами данных, отличаются от тех, которые используются в реляционной базе данных. В иерархической базе данных родительские элементы могут иметь дочерние элементы (один, несколько или ни одного). Древовидная структура имеет ветви, каждая ветвь имеет множество листьев – полей данных. В таких базах данных есть хорошо известные, заранее определенные пути доступа к данным, но они не настолько гибки при создании отношений между элементами данных, по сравнению с реляционными базами данных. Иерархические базы данных целесообразно использовать для хранения данных, имеющих отношения «один-ко-многим».

Рисунок 9-4. Иерархическая база данных хранит данные в структуре, имеющей форму деревьев, отношения данных в ней реализованы в виде отношений родительских и дочерних элементов

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

Наиболее часто используемой реализацией иерархической модели является модель LDAP. Также, иерархическая модель используется в структуре системного реестра Windows и различных файловых системах, но в новых реализациях баз данных она обычно не используется.

Сетевая модель базы данных (network database model) построена на основе иерархической модели данных. Чтобы обойти ограничения иерархической модели, требующие для получения элемента данных знать маршрут перехода с одной ветви в другую, а затем от родительского элемента к дочернему, в сетевой модели каждому элементу данных разрешается иметь несколько родительских и дочерних записей. Это создает избыточную, похожую на сеть структуру, а не жесткую древовидную структуру. Посмотрите на Рисунок 9-5, вы увидите, что сетевая модель создает структуру похожую на полносвязную топологию сети. Это обеспечивает избыточность и дает возможность более быстрого поиска данных по сравнению с иерархической моделью.

Рисунок 9-5. Различные модели баз данных

Эта модель использует конструкции из записей и множеств. Запись содержит поля, которые могут располагаться в иерархической структуре. Множества определяют отношения «один-ко-многим» между различными записями. Одна запись может быть «владельцем» любого количества множеств, при этом тот же «владелец» сам может быть членом различных множеств. Это означает, что одна запись может быть «главной» и под ней может находиться множество элементов данных, либо эта запись может находиться ниже в иерархии, под различными полями, являющимися для нее «главными». Это предоставляет значительную гибкость при разработке отношений между элементами данных.

Объектно-ориентированная база данных (object-oriented database) предназначена для работы с различными типами данными (изображения, аудио, документы, видео). Система управления объектно-ориентированными базами данных (ODBMS - object-oriented database management system) более динамична по своей природе, чем реляционная СУБД, поскольку она создает объекты при необходимости, а данные и процедуры (называемые методами) при запросе объекта предоставляются вместе с ним. При работе с реляционной базой данных, приложение должно использовать свои собственные процедуры для получения данных из базы данных и их обработки. Реляционная база данных не предоставляет процедур, как это делает объектно-ориентированная база данных. Объектно-ориентированная база данных использует классы для определения атрибутов и процедур ее объектов.

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

Целью создания этой модели была попытка учесть ограничения, которые накладывало использование реляционной базы данных при необходимости хранения и обработки больших объемов данных. Кроме того, объектно-ориентированные базы данных не зависят от SQL, с такими базами данных могут работать приложения, не являющиепся SQL-клиентами.
Жаргон баз данных. Ниже приведены некоторые ключевые понятия, используемые при работе с базами данных:
  • Запись (Record) – набор связанных элементов данных
  • Файл (File) – набор однотипных записей
  • База данных (Database) – набор данных, связанных с перекрестными ссылками (cross-referenced)
  • СУБД (DBMS) – система управления и работы с базой данных
  • Запись (Tuple) – строка в двумерной базе данных
  • Атрибут (Attribute) – столбец в двумерной базе данных
  • Первичный ключ (Primary key) – столбец, который делает каждую строку уникальной (каждая строка таблицы должна содержать первичный ключ)
  • Представление (View) – виртуальное представление информации, определенное администратором для ограничения просмотра субъектами определенных данных
  • Внешний ключ (Foreign key) – атрибут одной таблицы, связаный с первичным ключом другой таблицы
  • Ячейка (Cell) – пересечение строки и столбца
  • Схема (Schema) – определяет структуру базы данных
  • Словарь данных (Data dictionary) – центральное хранилище (репозиторий) элементов данных и их взаимосвязей
ПРИМЕЧАНИЕ. Язык структурированных запросов (Structured Query Language, SQL) представляет собой стандартный язык программирования, используемый для организации взаимодействия клиентов с базой данных. Большинство реализаций баз данных поддерживают SQL. SQL позволяет клиентам выполнять такие операции, как вставка, замена, поиск и добавление данных.
Объектно-ориентированные базы данных не так распространены, как реляционные базы данных, они используются в основном в таких областях, как машиностроение, биология, а также для удовлетвонения некоторых потребностей финансового сектора.

Теперь давайте рассмотрим объектно-реляционные базы данных. Объектно-реляционная база данных (object-relational database, ORD) или объектно-реляционная система управления базами данных (object-relational database management system, ORDBMS) – это реляционная база данных с фронтальным программным обеспечением (интерфейсом), написанным на объектно-ориентированном языке программирования. Но зачем нужны такие комбинации? Реляционная база данных содержит данные в статических двумерных таблицах. При обращении к данным, они должны подвергаться какой-либо последующей обработке, иначе зачем получать эти данные? Если у нас есть интерфейс, предоставляющий процедуры (методы) обработки данных, тогда приложению, которое обращается к этой базе данных, не нужны аналогичные собственные процедуры.

Различным компаниям требуется различная бизнес-логика для работы с данными. Возможность разработать такого фронтального программного обеспечения позволяет приложениям использовать процедуры бизнес-логики и данные базы данных. Например, если у нас есть реляционная база данных, в которой хранятся данные инвентаризации товаров на складе, нам хотелось бы иметь возможность использовать эти данные для различных бизнес-целей. Одно приложение может обращаться к базе данных, чтобы просто проверить количество имеющихся в наличии единиц товара А. Можно создать интерфейсный объект, который будет выполнять эту процедуру, обращаясь за данными в базу данных и предоставляя готовый ответ запрашивающему приложению. Также может существовать потребность проведения аналитических расчетов на основании данных инвентаризации, например, провести анализ наиболее востребованных товаров. Для этого может быть разработан другой объект, который будет собирать из базы данных нужные данные, проводить расчеты и предоставлять их результаты запрашивающему приложению. Для выполнения других расчетов и подготовки отчетов могут быть созданы другие объекты. На Рисунке 9-6 показаны различные объекты данных, выполняющие различные команды бизнес-логики.

Рисунок 9-6. Объектно-реляционная модель позволяет включать в объекты бизнес-логику и функции


Данные бесполезны, если вы не можете их использовать. Приложения должны иметь возможность получать и работать с информацией, хранимой в базах данных. Они также нуждаются в некотором интерфейсе и механизме передачи информации. Ниже мы рассмотрим некоторые из таких интерфейсов:
  • Open Database Connectivity (ODBC) – это интерфейс прикладного программирования (API – application programming interface), который позволяет приложению взаимодействовать с базой данных локально или удаленно. Приложение посылает запросы к ODBC API, ODBC определяет необходимый для конкретной базы данных драйвер, позволяющий выполнить трансляцию запросов, затем этот драйвер выполняет указанную трансляцию запросов в команды базы данных, понятные для этой базы данных.
  • Object Linking and Embedding Database (OLE DB) разделяет данные на компоненты, которые работают как промежуточное программное обеспечение (middleware) на клиенте или сервере. Это предоставляет низкоуровневый интерфейс для связи информации, хранящейся в различных базах данных, и обеспечивает доступ к данным независимо от того, где они хранятся и в каком формате. Ниже приведены некоторые характеристики OLE DB:
    • Он заменяет ODBC, расширяет набор функций для поддержки более широкого круга нереляционных баз данных, таких как объекты баз данных и таблицы, которые не обязательно поддерживают SQL
    • Набор основанных на COM интерфейсов, которые предоставляют приложениям унифицированный доступ к данным, хранящимся в различных источниках данных (см. Рисунок 9-7)
Рисунок 9-7. OLE DB предоставляет интерфейс, позволяющий приложениям взаимодействовать с различными источниками данных
    • Поскольку OLE DB основан на COM, он ограничен использованием клиентских средств, разработанных для платформы Microsoft Windows
    • Разработчик обращается к сервисам OLE DB через объекты данных ActiveX (ADO – ActiveX Data Objects)
    • Это позволяет различным приложениям использовать различные типы и источники данных
  • ActiveX Data Objects (ADO) – это API, позволяющий приложениям получать доступ к серверам баз данных. Он представляет собой набор интерфейсов ODBC, которые позволяют использовать функциональность источников данных посредством доступных объектов. ADO для соединения с базой данных использует интерфейс OLE DB, он может быть использован в процессе разработки на множестве различных языков сценариев. Ниже приведены некоторые характеристики ADO:
    • Это высокоуровневый программный интерфейс доступа к лежащей ниже технологии, реализующей доступ к данным (такой как OLE DB)
    • Это набор COM-объектов для доступа к источникам данных, а не просто доступа к базе данных
    • Он позволяет разработчикам писать программы доступа к данным, не зная, каким образом реализована сама база данных
    • Команды SQL не требуются для доступа к базе данных при использовании ADO
  • Java Database Connectivity (JDBC) – это API, который позволяет Java-приложениям взаимодействовать с базами данных. Приложение может обращаться к базе данных через ODBC или напрямую. Ниже приведены некоторые характеристики JDBC:
    • Это API, который обеспечивает функциональность, аналогичную ODBC, но он специально разработан для использования приложениями баз данных на Java
    • Он позволяет использовать независимые от базы данных соединения между платформой Java и широким кругом баз данных
    • JDBC представляет собой Java API, который позволяет Java-программам выполнять SQL-выражения

Как и любое программное обеспечение, базы данных разрабатываются с помощью языков программирования. Большинство языков программирования баз данных включает язык описания данных (DDL – data definition language), который определяет схему; язык манипулирования данными (DML – data manipulation language), который анализирует данные и определяет, как эти данные могут обрабатываться в базе данных; язык управления данными (DCL – data control language), который определяет внутреннюю организацию базы данных; специальный язык запросов (QL – query language), который определяет запросы, позволяющие пользователям получить доступ к данным в базе данных.

Каждая модель базы данных может иметь множество других отличий, обусловленных, в том числе, разными подходами различных производителей. Однако большинство из них включает следующую базовую функциональность:
  • Язык описания данных (DDL) определяет структуру и схему базы данных. Структуру может определять размер таблицы, размещение ключа, представления, отношения элементов данных. Схема описывает тип данных, которые будут храниться и обрабатываться, а также их свойства. DDL определяет структуру базы данных, операции доступа и процедуры целостности.
  • Язык манипулирования данными (DML) содержит все команды, позволяющие пользователю просматривать, управлять и использовать базу данных (команды view, add, modify, sort, delete).
  • Язык запросов (QL) дает пользователям возможность делать запросы в базу данных.
  • Генератор отчетов готовит печатные формы с данными определенным пользователем образом.

Словарь данных (data dictionary) является централизованным набором определений элементов данных, объеков схемы, а также ключей ссылок (reference keys). Объекты схемы могут содержать таблицы, представления, индексы, процедуры, функции и триггеры. Словарь данных может содержать значения по умолчанию для столбцов, информацию целостности, имена пользователей, привилегии и роли пользователей, информацию аудита. Это инструмент, используемый для централизованного управления частями базы данных посредством управления данными о данных (именуемыми метаданными) в базе данных. Он обеспечивает перекрестные ссылки между группами элементов данных и базами данных.

Программное обеспечение, управляющее базой данных, создает и читает словарь данных, чтобы выяснить, какие существуют объекты схемы, а также проверить, имеют ли конкретные пользователи права доступа, необходимые для их просмотра (см. Рисунок 9-8). При просмотре пользователями базы данных, они могут быть ограничены определенными представлениями. Различные параметры представлений для каждого пользователя хранятся в словаре данных. При добавлении новых таблиц, новых строк, или новой схемы, словарь данных обновляется – в него вносятся соответствующие изменения.

Рисунок 9-8. Словарь данных – это централизованное хранилище, которое содержит информацию о базе данных


Первичный ключ (primary key) – это идентификатор строки, он используется для индексации в реляционных базах данных. Каждая строка должна иметь уникальный первичный ключ, который должен представлять строку, как единое целое. Когда пользователь делает запрос на просмотр записи, база данных находит нужную запись по ее уникальному первичному ключу. Если первичный ключ не был бы уникальным, база данных не знала бы, какие записи нужно предоставить пользователю. На приведенном ниже рисунке, первичным ключом для таблицы А является кличка собаки. Каждая строка (запись) содержит характеристики каждой собаки. Поэтому, когда пользователь осуществляет поиск собаки «Бобик», ему будут предоставлена информация о породе, весе, цвете и хозяине соответствующей собаки.


Первичный ключ отличается от внешнего ключа, хотя они тесно связаны между собой. Если атрибут в одной таблице, имеет значение, соответствующее первичному ключу в другой таблице, и между этими двумя таблицами установлены отношения, этот атрибут называется внешним ключом (foreign key). Этот внешний ключ не обязательно является первичным ключом в своей таблице. Просто он должен содержать ту же информацию, которая содержится в первичном ключе другой таблицы, и быть связанным с первичным ключом в этой другой таблице. На приведенном ниже рисунке, первичным ключом Таблицы А является «Шарик». Поскольку Таблица B имеет атрибут, содержащий те же данные, что и этот первичный ключ, и между этими двумя ключами установлена связь, он называется внешним ключом. Это еще один способ для отслеживания взаимосвязей между данными, хранящимися в базе данных.


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

Это позволяет создавать взаимосвязи между различными элементами данных в базе данных по своему усмотрению.

Комментариев нет: