singalen: (Default)
[personal profile] singalen
[livejournal.com profile] ru_sql пока меня не пускает, [livejournal.com profile] ru_case сдох из-за неправильного названия.
Вопрошу у себя: какие именно угрозы безопасности закрывает DAL на stored procedures, в отличие от динамического SQL, как, скажем, в Hibernate? (уточнение вопроса)
Обычно на них упирают в MS SQL Server, но это потому что оный крив исторически. Даже в версии 2000 не было приличного кэша распарсенных запросов и execution plan-ов (это написано в доке, английским по белому). В результате CRUD на SQL в нём работал раз в 20 медленнее, чем на процедурах. Я не преувеличиваю, а скорее преуменьшаю.
Это приводило даже к таким невероятно уродливым костылям: ODBC драйвера для CRUD каждой таблицы генерировали-компилировали "временные процедуры".
И это в системе, которая называется SQL server. Ещё раз: MS SQL Server 2000 не является полноценным SQL-сервером (поправка).
Даже сейчас мы работаем с ним через кодогенератор (читай - дублируем код в промышленных масштабах).
Не говоря о невероятной кривизне инсталляции 2005-го и затруднениях в администрировании.
И ведь этот вторичный продукт покупают.

Но я хотел поговорить о процедурах как о подходе, не о MS SQL. Какой, в ухо, sql injection, если всё общение - между application server и db server? Нет такой буквы.
Далее, fine-grained security, да. Наверняка более мелкозернистая, чем при распределении доступа к столбцам и строкам. Но зачем она нам? Ищу и не нахожу ответа. Обычно всё равно приходится реализовывать более-менее полнофункциональный API для каждой сущности - получить список, получить по ключу, записать, удалить. В результате security не более fine-grained, чем на таблицах/столбцах.
Не говорите мне о вынесении бизнес-логики на уровень сервера БД. Ни один из известных мне популярных языков хранимых процедур не приспособлен для более-менее приличного программирования, у них ужасный синтаксис и никакие отладчики. Исключение, может быть, составляют встраиваемые в PostgreSQL языки, и оракловая Джава. Но и тут я не уверен. Более-менее сложная логика превратит вашу БД в legacy code очень быстро.

Нарыл ссылок:
http://en.wikipedia.org/wiki/Stored_procedure
отличная дискуссия: http://weblogs.asp.net/fbouma/archive/2003/11/18/38178.aspx "Stored procedures also will open up a maintenance problem. The reason for this is that they form an API by themselves. Changing an API is not that good, it will break a lot of code in some situations. Adding new functionality or new procedures is the "best" way to extend an existing API"
http://www.devx.com/Java/Article/29337
http://www.praetoriate.com/t_grid_rac_admin_security.htm
http://www.microsoft.com/technet/prodtechnol/mom/mom2005/Library/1405f97c-29c2-457f-b75a-e4800b085ae6.mspx?mfr=true

(no subject)

29/11/06 12:56 (UTC)
Posted by [identity profile] cotyary.livejournal.com
Да сдалась тебе эта оптимизация Ж;-))))
Ну скажи, предварительная (или черновая) валидация вводимых данных в тонком клиенте - это оптимизация?
Нет, это нормальная логика тонкого клиента.
Так почему тогда корректная выборка и компоновка данных, которые должны происходить в реляционных терминах, сделанные на сервере БД - это оптимизация?
Я не говорю, что надо всю логику в базу засунуть. Но, иногда, часть поместить туда всё-же стоит. Или предусмотреть, что какой-то компонент может туда перекочевать. И бить архитектуру программы на уровни так, чтоб эти уровни могли малой кровью быть перенесены на другой сервер (в смысле, логически ближе-дальше от клиенской машины) или продублированы там это необходимость при проектировании больших систем. А что будет причиной этого преноса оптимизация-ли (и оптимизация по чему) или положение звёзд - это, в общем, дело десятое.

(no subject)

29/11/06 13:14 (UTC)
Posted by [identity profile] nponeccop.livejournal.com
Вы же сами говорите, что мы же не знаем, что именно будет причиной переноса. Соответственно наш "гибкий" код всё равно окажется недостаточно гибким.

Мне кажется, что разумно писать плохой код с максимально быстрой скоростью, а если он перестает работать - то прохачить его пару раз. А если и после этого он не работает - выкинуть и написать по-человечески с учетом статистики по местам прохачивания. Конечно, если специфика системы такова, что в среднем никакой код не удается заставить работать путем умеренного грязного прохачивания лапши, то надо сразу писать хороший код (но опять же с учетом специфики мест где предполагается внесение хаков в случае лапшевидного варианта).

Вы считаете, что случаев, когда можно написать (создать рабочую систему) и как попало - крайне малое количество? Начиная с какого примерно объема системы в человекогодах разработчикам нужно отрубать очередной палец за каждую попытку писать лапшу?

(no subject)

29/11/06 13:39 (UTC)
Posted by [identity profile] cotyary.livejournal.com
Вы же сами говорите, что мы же не знаем, что именно будет причиной переноса. Соответственно наш "гибкий" код всё равно окажется недостаточно гибким. - сие не факт. Ключевое слово - малой кровью

По поводу второго абзаца. Представьте, что Вы не сможете делать суппорт в этой системе после выхода её в лайф. Вообще не сможете. В лучшем случае дадут логи посмотреть недельной давности.

Вы считаете, что случаев, когда можно написать (создать рабочую систему) и как попало - крайне малое количество? - нет, я так не считаю. Это просто очень дорого в последующей поддержке. Что может быть плюсом, если оплата программисту почасовая.

(no subject)

29/11/06 13:40 (UTC)
Posted by [identity profile] cotyary.livejournal.com
Витя, ты, как всегда, по существу и в точку.
Респект