Контакты

Для связи с нами можно использовать:
irc://irc.chatnet.ru:#gfs
icq://546460
email://cobalt[@]gfs-team.ru

Все материалы предоставлены только с ознакомительной целью
ГлавнаяСтатьиДругоеБазы данных. Введение.
© Cobalt 01.06.2007 статья не оптимизирована

 Этот материал не ставит себе целью сделать из четателя специалиста по базам
данных. Скорее это вводный материал для тех кто вообще ни имеет понятия о том
что это такое, для чего нужно и как с этим работать. Сейчас (да что сейчас,
уже давольно давно!) набирают популярность атаки типа sql-инжекция. Многие
начинающие "хакеры" столкнувшись с этим начинают использовать стандарные
приемы которых можно встретить на просторах интернета великое множество. Но
к сожалению (а может наоборот, к счастью) далеко не всегда годятся "стандартные"
приемы. Горазда чаще требуется понимать особенности той или иной базы данных
для того чтобы использовать уязвимость в своих целях. Да и читатель, я надеюсь,
не хочет оставаться скрипткидди, а желает понять что именно он делает =).

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

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

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

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

 И так две основные разновидности стандартов SQL:
 
  SQL99  - в том или ином виде потдерживается такими БД как MySQL и MSSQL.
  PG/SQL - этот стандарт используют БД Oracle и PostgreSQL.
  
 Если не вдаваться в особенности каждого из этих стандартов, то для обычного
пользователя они не велики. Ньюансы появляются когда начинаешь копать глубже,
но это не входит в планы автора статьи =). Мы будем рассматривать примеры для
SQL99 причем в том его виде каким его представляет себе MySQL. Этот выбор
был сделан потому как MySQL все-таки на данный момент наиболее распространненая
БД.

 Самое первое на что стоит обратить внимание - запрос SELECT - базовый во всех
системах. С помощью этого запроса можно производить выборку из БД нужных данных.
Упрощенный синтаксис этого запроса выглядит так:

 SELECT data
  [FROM] [[db.][table]]
  [WHERE param1 AND param2...]
  [GROUP BY gparam1,gparam2...]
  [ORDER BY oparam1,oparam2...]
  [LIMIT st[,count]]
  ;

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

 sum(data)       - суммирует data Для каждого выбранного ряда
 count(data)     - подсчитывает кол-во data для всех рядов
 concat(data1,data2...) - объединяет данные в одно строку

и еще много-много других.

 [FROM] [[db.][table]] - не обязательный "параметр" который позволяет указать
откуда мы выбираем собственно данные. db - указатель на базу (если нам не нравится
текущая), table - сама таблица.

 С у словием [WHERE param1 AND param2...] все намного сложнее. В качестве param1 и
param2 как не сложно догадаться выступают некоторые условия объедененные логическими
опираторами AND или OR. Тут очень большое поле для вашей фантазии, ибо можно
группировать условия в скобках и использовать различные параметры. param -
представляет из себя некоторое условие где один оператор тем или иным образом
сравнивается с другим. В качестве операторов могут выступать как поля таблиц
так и внешние данные. Я написал тем или иным образом, потому как кроме
обычных равно и больше/меньше существуют еще NOT и LIKE. NOT как не сложно
догадаться - отрицание. C LIKE несколько сложне ибо он используется когда
нам не доконца известно условие. Например в таблице есть некое текстовое
поле содержащие айпи адрса и мы хотим выбрать айпишники принадлежащие только
к подсети 192.168.0.0 - для этого нам все-голишь надо написать

 WHERE ip like "192.168.0%"
 
% - указывает на то что после этого символа может находиться чтоугодно.

 Самый сложный для новичка параметр -  [GROUP BY gparam1,gparam2...] - он
относится к сортировке данных и обычно используется если мы хотим подсчитать
например количество данных одного поля для другого. Проще всего объяснить на
примере. Представте ту же самую таблицу но кроме айпишников там содержатся
данные по трафику за каждый день накаченному с этого ip. Нам надо посчитать
сколько трафика за день накочал пользователь. Для этого надо составить такой
запрос:

 SELECT ip,sum(traff) FROM traffic GROUP BY ip
 
 А теперь отсортируем это по возрастанию:
 
 SELECT ip,sum(traff) FROM traffic GROUP BY ip ORDER BY sum(traff)
 
 Но нам выбирают слишком много результатов, а надо с 20-го по 30-й:
 
 SELECT ip,sum(traff) FROM traffic GROUP BY ip ORDER BY sum(traff) LIMIT 20,10
 
 Ну я думаю на сегодня груза достаточно, да и вообще, сейчас же лето, какого
лешего ты за компом седишь? Выгляни в окно, смотри сколько полуголых красавиц
шляется по улице без присмотра!

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



© Cobalt 01.06.2007 статья не оптимизирована

e-Commerce Partners Network
BOY написал:

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

Ник:

Текст:
P Br B I Qute



Код: обновить
Последние комментарии
19.11.2017 01:19:37 Dmitriyvah написал:
byncecopesy SlaltPog Kt ...
Пишем guestbook
18.11.2017 23:02:45 GlebNes написал:
hem unuby Osteotsematte ...
Пишем guestbook
18.11.2017 18:42:56 ViktorTap написал:
Zof edifam Weque ...
Пишем guestbook
Реклама

Тут должна была быть ваша реклама, но мы потеряли глиняную табличку с ее текстом. SapeId: 665044

Rambler's Top100