Stored procedures security
27/11/06 22:55Вопрошу у себя: какие именно угрозы безопасности закрывает 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
Tags:
(no subject)
29/11/06 12:31 (UTC)Кстати, боттлнек не обязательно находить, его можно предусмотреть
http://en.wikipedia.org/wiki/Optimization_(computer_science): Tony Hoare first said, and Donald Knuth famously repeated, "Premature optimization is the root of all evil."
С остальным согласен.
(no subject)
29/11/06 12:56 (UTC)Ну скажи, предварительная (или черновая) валидация вводимых данных в тонком клиенте - это оптимизация?
Нет, это нормальная логика тонкого клиента.
Так почему тогда корректная выборка и компоновка данных, которые должны происходить в реляционных терминах, сделанные на сервере БД - это оптимизация?
Я не говорю, что надо всю логику в базу засунуть. Но, иногда, часть поместить туда всё-же стоит. Или предусмотреть, что какой-то компонент может туда перекочевать. И бить архитектуру программы на уровни так, чтоб эти уровни могли малой кровью быть перенесены на другой сервер (в смысле, логически ближе-дальше от клиенской машины) или продублированы там это необходимость при проектировании больших систем. А что будет причиной этого преноса оптимизация-ли (и оптимизация по чему) или положение звёзд - это, в общем, дело десятое.
(no subject)
29/11/06 13:14 (UTC)Мне кажется, что разумно писать плохой код с максимально быстрой скоростью, а если он перестает работать - то прохачить его пару раз. А если и после этого он не работает - выкинуть и написать по-человечески с учетом статистики по местам прохачивания. Конечно, если специфика системы такова, что в среднем никакой код не удается заставить работать путем умеренного грязного прохачивания лапши, то надо сразу писать хороший код (но опять же с учетом специфики мест где предполагается внесение хаков в случае лапшевидного варианта).
Вы считаете, что случаев, когда можно написать (создать рабочую систему) и как попало - крайне малое количество? Начиная с какого примерно объема системы в человекогодах разработчикам нужно отрубать очередной палец за каждую попытку писать лапшу?
(no subject)
29/11/06 13:39 (UTC)По поводу второго абзаца. Представьте, что Вы не сможете делать суппорт в этой системе после выхода её в лайф. Вообще не сможете. В лучшем случае дадут логи посмотреть недельной давности.
Вы считаете, что случаев, когда можно написать (создать рабочую систему) и как попало - крайне малое количество? - нет, я так не считаю. Это просто очень дорого в последующей поддержке. Что может быть плюсом, если оплата программисту почасовая.
(no subject)
29/11/06 13:33 (UTC)(no subject)
29/11/06 13:40 (UTC)Респект