Приветствую all!
Есть следующая задача: клиентское приложение генерит sql и засылает его на сервер. Необходимо на клиенте поймать этот самый sql и подменить на свой. Перехват должен быть осуществлен ДО получения запроса ядром сервера БД. Причем решение должно работать и с MSSQL и c Oracle. С подобной задачей я не сталкивался, поэтому и прошу вашего совета — подскажите какую доку следует почитать для решения этой задачи. Почти уверен в том, что надо реализовать 2 решения в одном флаконе: одно для MSSQL, второе для Oracle. Какую доку читать в каждом случае? И вообще — возможна ли вообще подобная реализация?
Заранее благодарен за ответы, с уважением.
Здравствуйте, Led, Вы писали:
Led>Приветствую all! Led>Есть следующая задача: клиентское приложение генерит sql и засылает его на сервер. Необходимо на клиенте поймать этот самый sql и подменить на свой. Перехват должен быть осуществлен ДО получения запроса ядром сервера БД. Причем решение должно работать и с MSSQL и c Oracle. С подобной задачей я не сталкивался, поэтому и прошу вашего совета — подскажите какую доку следует почитать для решения этой задачи. Почти уверен в том, что надо реализовать 2 решения в одном флаконе: одно для MSSQL, второе для Oracle. Какую доку читать в каждом случае? И вообще — возможна ли вообще подобная реализация? Led>Заранее благодарен за ответы, с уважением.
А зачем это?
То что меня не убивает, делает меня умнее.
Re: Перехват и подмена SQL запроса
От:
Аноним
Дата:
02.10.07 10:31
Оценка:
Здравствуйте, Led, Вы писали:
Led>Приветствую all! Led>Есть следующая задача: клиентское приложение генерит sql и засылает его на сервер. Необходимо на клиенте поймать этот самый sql и подменить на свой. Перехват должен быть осуществлен ДО получения запроса ядром сервера БД. Причем решение должно работать и с MSSQL и c Oracle. С подобной задачей я не сталкивался, поэтому и прошу вашего совета — подскажите какую доку следует почитать для решения этой задачи. Почти уверен в том, что надо реализовать 2 решения в одном флаконе: одно для MSSQL, второе для Oracle. Какую доку читать в каждом случае? И вообще — возможна ли вообще подобная реализация? Led>Заранее благодарен за ответы, с уважением.
Вообще-то, странное желание...
Но вообще-то в MSSQL для этого используются INSTEAD OF триггеры.
Здравствуйте, Аноним, Вы писали:
А>Вообще-то, странное желание...
Как бы странно это не звучало, но есть приложение, которое генерит запросы для работы отчетов автоматически, не давая возможности написать SQL-выражение руками.(JDEdwards, есть такая софтина. Кто работал с ней тот меня поймет ) Например невозможно использование GROUP BY, нельзя создавать вложенных SELECT'ов, хинт на запрос не повесить и т.п. Это очень здорово сковывает разработчиков, вот я и пытаюсь попробовать внедриться в SQL сгенерированный приложением и добавить в него что нибудь рукописное. Причем желательно реализовать с помощью С++.
Led пишет: > очень здорово сковывает разработчиков, вот я и пытаюсь попробовать > внедриться в SQL сгенерированный приложением и добавить в него что > нибудь рукописное. Причем желательно реализовать с помощью С++.
Боюсь что неправильным путем вы идете, товарищь ...
Здравствуйте, MasterZiv, Вы писали:
MZ>Led пишет: >> очень здорово сковывает разработчиков, вот я и пытаюсь попробовать >> внедриться в SQL сгенерированный приложением и добавить в него что >> нибудь рукописное. Причем желательно реализовать с помощью С++.
MZ>Боюсь что неправильным путем вы идете, товарищь ...
Led пишет: > MZ>Боюсь что неправильным путем вы идете, товарищь ... > > а где же он — правильный путь?))
Правильный путь в отказе от использования таких софтин, которые
"не давая возможности написать SQL-выражение руками".
JDEdwards, говоришь ?
Posted via RSDN NNTP Server 2.1 beta
Re[6]: Перехват и подмена SQL запроса
От:
Аноним
Дата:
03.10.07 06:50
Оценка:
Здравствуйте, MasterZiv, Вы писали:
MZ>Правильный путь в отказе от использования таких софтин, которые MZ>"не давая возможности написать SQL-выражение руками". MZ>JDEdwards, говоришь ?
JDEdwards, он самый. От такой софтины отказаться — это не решение. Ибо сложность разработки внутри такой софтины руководство не волнует и совершенно правильно не волнует. А вот то, что с внедрением подобных систем повышается качество отчетности — это факт. При условии, конечно, нормальных бизнес процессов на предприятии и адекватной команды со стороны заказчика и внедренцев.
Re: Перехват и подмена SQL запроса
От:
Аноним
Дата:
03.10.07 07:43
Оценка:
Здравствуйте, Led, Вы писали:
Led>Приветствую all! Led>Есть следующая задача: клиентское приложение генерит sql и засылает его на сервер. Необходимо на клиенте поймать этот самый sql и подменить на свой.
Действительно есть такая неприятная задачка — в зависимости от выбора пользователя менять
содержание запроса. Думаю тебе надо перехватывать не на стороне сервера а на стороне клиента. Пользователь навыбирал цокнул на кнопку, ты проанализировал на стороне клиента что он навыбирал и выбрал и отослал нужный заранее подготовленый запрос на сервер. Если пользователь выбирал что-то с сервера и это что-то должно/недолжно попасть в результаты(ну что-то вроде фильтра),то тоже самое выбираешь один из готовых запросов и отсылаешь. Если это не нравится, то придётся клеить строки и из них собирать запрос, но это сложнее.
На стороне сервера выгоды в простоте ты не получишь.
В MQ SQL2000 можно посмотреть в сторону расширенных хранимых процедур Extended Stored Procedure.
PS. Активизироваться не смог.
PWW
Ну, если хочется жосткого секса без поблажек, то можно поискать в сети спецификации протокола TDS. Например, сходить на http://www.freetds.org/.
Затем реализовать свой простенький прокси для этого протокола. Т.е. ты ставишь софтинку на клиентскую машину, приложение-жертва коннектится к localhost, а твой прокси перенаправляет запросы на настоящий сервер.
Ну и в конце, собственно, научиться выцеплять интересующие тебя запросы и подменять их правильным образом.
Сам я такого ужоса никогда не видел, но чисто теоретически это всё возможно.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Led, Вы писали:
Led>Например невозможно использование GROUP BY, нельзя создавать вложенных SELECT'ов, хинт на запрос не повесить и т.п.
часть таких ограничений можно обойти, если цеплять софтину не напрямую к таблицам, а ко вьюхам, в которых все эти group by и хинты уже прописаны.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Led, Вы писали:
S>Ну, если хочется жосткого секса без поблажек, то можно поискать в сети спецификации протокола TDS. Например, сходить на http://www.freetds.org/. S>Затем реализовать свой простенький прокси для этого протокола. Т.е. ты ставишь софтинку на клиентскую машину, приложение-жертва коннектится к localhost, а твой прокси перенаправляет запросы на настоящий сервер.
Как вариант — написать свой odbc/oledb драйвер-прокси, перенаправляющий все запросы к настоящему драйверу.
Здравствуйте, seregaa, Вы писали:
S>Здравствуйте, Sinclair, Вы писали: S>Как вариант — написать свой odbc/oledb драйвер-прокси, перенаправляющий все запросы к настоящему драйверу.
Звучит интересно, где можно ознакомиться/почитать про написание собственных odbc/oledb драйверов-прокси, не подскажете ссылкой? Заранее благодарю.
Здравствуйте, Led, Вы писали:
Led>Звучит интересно, где можно ознакомиться/почитать про написание собственных odbc/oledb драйверов-прокси, не подскажете ссылкой? Заранее благодарю.
OLEDB: OLE DB Simple Provider (OSP) Toolkit
"The Microsoft OLE DB Simple Provider (OSP) Toolkit offers a framework that simplifies the task of writing OLE DB providers over simple data and exposing that data to any OLE DB consumer"
Здравствуйте, Led, Вы писали:
Led>Здравствуйте, Аноним, Вы писали:
А>>Вообще-то, странное желание...
Led>Как бы странно это не звучало, но есть приложение, которое генерит запросы для работы отчетов автоматически, не давая возможности написать SQL-выражение руками.(JDEdwards, есть такая софтина. Кто работал с ней тот меня поймет ) Например невозможно использование GROUP BY, нельзя создавать вложенных SELECT'ов, хинт на запрос не повесить и т.п. Это очень здорово сковывает разработчиков, вот я и пытаюсь попробовать внедриться в SQL сгенерированный приложением и добавить в него что нибудь рукописное. Причем желательно реализовать с помощью С++.
Извините, но — максимум что тут можно сделать — это подарить Вам скафандр с гамаком.
Я по долгу службы занимаюсь автоматическим разбором и преобразованием запросов...
Это — само по себе — занятие не для слабонервных...
Если включить сюда еще и анализ пакетов TDS и (не знаю, как оно зовётся в оракл)...
Скажем так — могу только пожелать удачи