Как вы можете создать таблицу (или другой объект), которая всегда возвращает значение, переданное его предложению WHERE, как зеркало - PullRequest
0 голосов
/ 13 ноября 2018

Существует устаревшее приложение, которое использует таблицу для перевода имен заданий в имена файлов.Это устаревшее приложение запрашивает его следующим образом:

SELECT filename FROM aJobTable WHERE jobname = 'myJobName'

Но на самом деле эти имена заданий всегда соответствуют именам файлов (например, «myJobName.job» - это имя задания, но также и имя файла).таблицы появляются ненужно.Но, к сожалению, мы не можем изменить код этой программы, и программе просто нужно выбрать его из таблицы.

Это на самом деле немного раздражает.Потому что нам нужно синхронизировать эту базу данных.Если имя задания отсутствует в таблице, его нельзя использовать.Итак, как наш единственный выход, сейчас у нас есть несколько vbscripts для синхронизации этой таблицы , добавляющих записи для каждого возможного имени файла.В результате в таблице всего 2 столбца с одинаковыми значениями. - Мы хотим избавиться от этого.

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

«Эксплойты»

В этом наследии можно настроить следующие применение .Я догадываюсь, что это может открыть путь для некоторых хитростей / хаков.

  • использование MS Access или SQL Server (мы предпочитаем sql server)
  • Имя таблицы (например, aJobTable)
  • Имя столбца имени файла (например, filename)
  • Имя столбца имени задания (например, jobname)

Вот что я придумала:

Если я создам табличную функцию mirror(a), тогда я довольно близок к тому, что хочу.Тогда я мог бы использовать это как

SELECT filename FROM mirror('MyJobName.job')

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

SELECT filename FROM mirror WHERE param1 = 'MyJobName.job'

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

Итак, мне было интересно, может быть, кто-то еще знает, как заставить его работать.

Итак, мой вопрос: "Как вы можете создать таблицу?(или другой объект), который всегда возвращает значение, переданное его предложению WHERE, как зеркало. "

1 Ответ

0 голосов
/ 13 ноября 2018

Сложно ответить, не зная кода, который использует приложение, но если мы предположим, что он принимает только строки и объединяет их без каких-либо тестов, я бы предположил, что код такой: (переведено на c #)

var sql = "SELECT "+ field +" FROM "+ table +" WHERE "+ conditionColumn +" = '"+ searchValue +"'";

Поскольку это открытая дверь для внедрения SQL, и учитывая тот факт, что SQL Server позволяет вам два способа создания псевдонима - value as alias и alias = value, Вы можете воспользоваться этим и попытаться сгенерировать SQL-оператор, подобный этому:

SELECT field /* FROM table WHERE conditionColumn */ = 'searchValue' 

Таким образом, поле должно быть "field /* ",
и условиеColumn должно быть "conditionColumn */"

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

...