ODBC-SQL: параметризованный INSERT с подвыборами внешнего ключа - PullRequest
0 голосов
/ 12 марта 2019

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

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

CREATE TABLE DBA.dms_link (
      nr            INTEGER
    , hybrid        NVARCHAR (256)
    , docid         INTEGER
    , container     NVARCHAR (128)
    , link_category INTEGER
    , dms_func_id   NCHAR (20)
    , CONSTRAINT ASA655 PRIMARY KEY (nr)
    , CONSTRAINT dms_link_dms_categories FOREIGN KEY (link_category) REFERENCES DBA.dms_categories (id)
    , CONSTRAINT dms_link_dms_doc FOREIGN KEY (docid, container) REFERENCES DBA.dms_doc (docid, container)
    , CONSTRAINT fk_dms_link_dms_func FOREIGN KEY (dms_func_id) REFERENCES DBA.dms_func (id)
);

Данные для ссылок на внешний ключ предоставляются в видеподзапросы, например:

list.Add("docid", "(SELECT max(docid) FROM dms_doc)");

Я знаю, как связать параметры со значениями в экземпляре IDbCommand.Однако я не уверен, поддерживается ли способ вставки ссылок на внешние ключи, как в описанной таблице.Не существует типа System.Data.Odbc.OdbcType, который позволял бы передавать подзапрос.И другие варианты кажутся противоречивыми: хотя целевое поле Int, подзапрос как тип будет String.

Примечание. Я понимаю, что поиск идентификаторов типа SELECT MAX() проблематичен, однакосистема, использующая базу данных, также построена таким образом.

...