Хранимая процедура SQL для каждого отдельного оператора SQL в .NET? - PullRequest
3 голосов
/ 04 декабря 2008

Рекомендуется ли использовать хранимую процедуру для каждого отдельного вызова SQL в приложениях .NET?

Рекомендуется ли это из соображений производительности и уменьшения площади поверхности для атак с использованием SQL-инъекций (в веб-приложениях)?

Ответы [ 5 ]

9 голосов
/ 04 декабря 2008

Хранимые процедуры имеют несколько преимуществ перед параметризованными запросами:

  1. При использовании исключительно вы можете отключить доступ к своим учетным записям приложений: СОЗДАТЬ, ВСТАВИТЬ, ВЫБРАТЬ, ОБНОВИТЬ, ИЗМЕНИТЬ, УДАЛИТЬ, УДАЛИТЬ и т.д. .

  2. Они обеспечивают согласованный, управляемый интерфейс, когда несколько приложений используют одну и ту же базу данных.

  3. Использование процедур позволяет администратору базы данных управлять запросами и настраивать их даже после развертывания приложения.

  4. Развертывание небольших изменений и исправлений ошибок намного проще.

У них также есть несколько недостатков:

  1. Количество процедур может быстро возрасти до такой степени, что их обслуживание затруднено, и современные инструменты не предоставляют простого метода для адекватной документации.

  2. Параметризованные запросы помещают код базы данных рядом с местом, где он используется. Хранимые процедуры держат его далеко друг от друга, что затрудняет поиск связанного кода.

  3. Хранимые процедуры сложнее версии.

Вам необходимо взвесить эти затраты / выгоды для вашей системы.

4 голосов
/ 04 декабря 2008

Нет.

Если вы отправляете свои запросы в SQL Server в виде параметризованных запросов, SQL Server будет кэшировать план выполнения И правильно очищать введенные вами параметры, чтобы избежать атак внедрения SQL.

3 голосов
/ 04 декабря 2008

Есть еще одно преимущество - когда дело доходит до настройки, особенно для каждого клиента, это легко сделать с помощью SP (добавив подсказки или даже переписав код). Со встроенным SQL это практически невозможно.

3 голосов
/ 04 декабря 2008

Я предпочитаю хранимые процедуры, а не встроенный SQL, потому что таким образом SQL - это единое место; однако я предпочитаю использовать такой инструмент, как nHibernate, который автоматически сгенерирует для меня SQL, тогда вам не о чем беспокоиться!

2 голосов
/ 04 декабря 2008

Это всего лишь один из способов делать вещи. Плюсы включают хранение всего вашего кода SQL в одном месте, проверку процедур на наличие синтаксиса во время создания и возможность устанавливать разрешения для процедур, которые обычно представляют собой своего рода «действие» и хорошо подходят для концептуальной модели безопасности.

Недостатки включают в себя огромное количество процедур для любого среднего или крупного приложения, а также всю уборку, которая идет с этим.

Продукт моего работодателя использует procs для всего, и я должен сказать, что при правильной практике это вполне терпимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...