войти зарегистрироваться

Блог им. qq6kaК чему может привести Sql-инъекция

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

Представьте себе провинциальный городок с населением около 60000 человек. В городе этом два провайдера. Один действует уже около 8 лет и имеет около 5000 клиентов. Про него и сей рассказ.

Просматривая один из ресурсов (а точнее — сайт администрации того города), расположенный на сервере, принадлежащем провайдеру, изменил запрос /news.php?id=123 на /news.php?id=124-1. Результат не изменился — ошибок нет, отображается та же новость. Дальше — рутинная работа по подбору количества полей. В принципе, ничего интересного я не ждал, подобных ошибок полно, если бы всё это дело не работало из пользователя root. К тому же не фильтровались теги и яваскрипт в теле новостей. И тут Остапа понесло…

PostgreSQLВ ожидании 9.0: NOTIFY/LISTEN

Люди, внимательно следящие за новинками в мире PostgreSQL, не по наслышке знакомы с блогом Хуберта 'depesz' Любашевского. А циклы его постов «Waiting for X.X» — настоящий кладезь полезной информации.

Не забыл он и про предстоящий релиз. На его блоге уже присутствуют 34 поста из цикла «Waiting for 9.0». Казалось бы, что угнаться за братом-поляком не представляется возможным. Но в очередной раз просматривая заметки к релизу, я обнаружил ценное нововведение, обделенное вниманием. А именно новую реализацию LISTEN/NOTIFY механизма.

Zend FrameworkZend_Db_Table_Select Dynamic Finder

Привет, Хабр! Dynamic Finder

Написал класс, использующий Zend_Db_Table_Select и позволяющий использовать Dynamic Finder в моделях в проектах на Zend Framework. Статья о том, что этот класс умеет, а также ссылка на исходный код предлагаются вашему вниманию.

Что это, зачем?



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

Dynamic Finder позволяет избежать написания ряда методов вида getById(…), getByLoginAndPassword(…), getAllByCountry(…) внутри модели в виде построения полноценных SQL-запросов и выборок. Вместо этого, в данной реализации достаточно подключить Dynamic Finder к модели должным образом, и, далее, программист может использовать эти методы модели непосредственно в контроллере или представлении. При этом реально эти методы в модели вообще не существуют.

Таким образом, экономится время работы программиста.

Dynamic Finder уже был реализован в том или ином виде в различных библиотеках и фреймворках, в частности, в Ruby on Rails.

В данной реализации Dynamic Finder является надстройкой, использующей Zend_Db_Select / Zend_Db_Table_Select, и предназначен для выборок из только одной таблицы.

SQLLogParser — привычный взгляд на непривычные вещи

Когда я в очередной раз использовал LogParser, то чтобы проникнуться и чужим опытом, ввел его название в поиск на Хабре. Как результат — сообщение «Удивительно, но поиск не дал результатов». Вот уж воистину удивительно, когда столь интересный инструмент обойден вниманием. Пришла пора восполнить этот пробел. Итак, встречайте LogParser. Маленькая, но чертовски полезная утилита для любителей SQL.

Из названия инструмента, казалось бы, очень непросто понять, что он делает в разделе SQL. А правда заключается в том, что он такой же LogParser, как и ChartGenerator. В то смысле, что он справляется с обоими задачами с одинаковыми успехом. В целом я бы его охарактеризовал как SQL-процессор гетерогенных данных. Концепция работы в общем такова, что он берет данные из некоторого формата и преобразует их в табличный вид (собственно говоря, только на этом этапе и выполняется иногда парсинг). Затем, посредством выполнения над этими табличными данными некоторого SQL-запроса формирует таблицу с результатом и сохраняет ее опять же в некотором формате. Если коротко, то цепочка выглядит как подготовка входных данных->SQL-процессинг->генерация выходных данных.

SQLОптимизация хранимых процедур в SQL Server

Доброго дня, хабрачеловек. Сегодня я бы хотел обсудить с вами тему хранимых процедур в SQL Server 2000-2005. В последнее время их написание занимало львиную долю моего времени на работе и чего уж тут скрывать – по окончанию работы с этим делом осталось достаточно информации, которой с удовольствием поделюсь с тобой %пользовательимя%.
Знания, которыми я собираюсь поделиться, к сожалению,(или к счастью) не добыты мной эмперически, а являются, в большей степени, вольным переводом некоторых статей из буржуйских интернетов.
Итак, как можно понять из названия речь пойдет об оптимизации. Сразу оговорюсь, что все действия, которые я сейчас буду описывать, действительно дают существенный(некоторые больший, некоторые меньший) прирост производительности.
Данная статья не претендует на полное раскрытие темы оптимизации, скорее это собрание практик, которые я применяю в своей работе и могу ручаться за их эффективность. Поехали!

PostgreSQLУказание Windows путей в выражениях PostgreSQL

Не так уж и много выражений существует в диалекте SQL от Postgres'а, требующих в качестве аргумента путь файловой системы. С ходу могу назвать пару:
  • CREATE TABLESPACE…
  • CREATE FUNCTION… (в случае динамической загрузки функций на языке C)

Блог им. ManticoreDDB поверх RDB на Питоне

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

PostgreSQLРаспараллеливание длительных операций

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