Re[3]: [Linq2db] InsertWithIdentity и Sql Injection
От: rameel https://github.com/rsdn/CodeJam
Дата: 04.01.16 19:58
Оценка:
Здравствуйте, elcolex, Вы писали:

E>И использую я переменные (значения приходят с формы ввода): в linq2db есть такой способ прикольный — db.Value().Value().Value().InsertWithIdentity(). Это чтобы не все поля таблицы инсертить.


Есть разница как использовать
db.Persons.Value(p => p.Name, () => name).Insert();
db.Persons.Value(p => p.Name, name).Insert();


E>Но я не совсем понял, а для чего такие сложности? Константы это или не константы. Всегда использовать бинд-переменные да и не волноваться — а правильно ли мы заэскейпили?


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

E>Вот, реальный пример: в поле ввода введено значение (без ковычек) "---юЩУЯ----"

E>И у меня при инсерте выдаёт оракловую ошибку "ORA-01008 not all variables bound". И я не понимаю что произошло. Т.е. это значение не вставилось в таблицу.

Не понимаешь, но виновата библиотека?

E>И потом не объяснишь разработчику, что вот этот InsertWithIdentity не используй, потому что он не совсем безопасный, а вот этот используй.


Нет такого, Insert и InsertWithIdentity работают совершенно одинаково.

E>Эх, такая классная библиотека. Это ж надо...


Предлагаю разобраться, а не кидаться эээ беспочвенными обвинениями
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.