Блин, классный пост, но боюсь, что потонет в общей ленте.. А для переноса в сообщество IT юмора у тебя не хватает рейтинга, нужно 250. Обидно :(
А сразу нельзя в нужное сообщество поместить? Ну или модератора тогда уж позвать.
В общей ленте он утонет совершенно заслуженно.
Я как раз адмодер в том сообществе, но у человека не хватает рейтинга для переноса. В сообществе настроено ограничение на минимальное количество рейтинга у пользователя в 250.
@stavropol, категорически приветствую. Может отменим порог для пользователей в 250 рейтинга? Мне кажется, что проблем не должно возникнуть.
Думаю, не стоит этого делать. Когда это сообщество только появилось, сюда стали новореги лить всякое гуано, пришлось включить премодерацию. Потом, из-за того, что я не мог оперативно посты модерировать, пришлось сделать порог 250 рейтинга. Зато соотношение постов к количеству подписчиков у нас одно из самых лучших (если не лучшее). 250 не такой уж большой рейтинг. Если не ошибаюсь, при регистрации дают 100 или 200.
Если есть другие аргументы в пользу отмены, пишите.
@Sonad, @EHOTnOTACKYH
Хм, могу в пользу этого решения высказать то, что я нахожусь на сайте довольно часто и могу оперативно реагировать на неформат. С другой стороны, порог в 250 рейтинга действительно не так высок, а я весьма и весьма редко сталкиваюсь с постами в общей ленте, которые нельзя перенести из-за рейтинга.
UPD: Заметил, что пост был перенесен в соо. Администраторы могут переносить посты минуя ограничение или оно просто на время было снято и потом сразу возвращено?
Блин, я уж понадеялся, что у вас больше прав на это дело. Жаль.
В целом, я согласен, что ради нескольких постов в месяц нет смысла снимать ограничение. За пост обидно было..
Я согласен, 250 не настолько большой рейтинг, и даже при этом ограничении умудряются часто заливать откровенную дичь. Да, @Sonad часто реагирует быстрее нас, но не всегда же. Во всяком случае, я пусть и не часто, но довольно регулярно выношу посты в общую ленту.
Потом, из-за того, что я не мог оперативно посты модерировать, пришлось сделать порог 250 рейтинга.
Лучше добавить модераторов.
На полтора поста в день смысл кучу модераторов назначать? Хотя, если открыть всем доступ, шлак лить начнут, придется как в свежем сидеть. Только есть ли смысл в этом.
Настолько проффесиональный, что без тегов не понятен, хотя с t-sql работаю уже 13 лет.
Сначала думал, что ему знания sql привили
Что происходит в комиксе? После обновления(прививки) SQL исчез рабочий стол? Такое случается?
В sql есть такая тема как инъекция. Это внедрение вредоносного кода в текстовые поля в интерфейсе.
Например, если клиент, веб-сервер или сервер приложений сам формирует исполняемый sql код, а не использует процедуры, или же если в процедурах sql на основе текстовых данных от клиента формируется динамический код. И при этом доступ к БД настроен так что всем всё можно. То есть риск инъекций.
Например, у тебя в клиенте есть следующий код:
sql="select * from table1 where id='"+idValue+";'";
Где sql - строка с кодом, который выполняется на сервере sql, a idValue - значение из текстового поля, который вводит пользователь
Тогда злоумышленник может сделать так, что в переменной sql будет, например, храниться:
select * from table1 where id=''; drop table table1; select ''
Шутка в том, что ему с помощью инъекции запустили drop table(команда удаления таблицы), по английски table - это как таблица, так и стол.
Вообще-то SQL-ъекции - это как раз про криворукость бэкендеров. Причем тут разработчики БД?
При том, что это не бэкендеров дело писать запросы и хранимки с ними. Только плиз, не надо писать про орм.
В смысле не бэкендеров? А чьё же? Фронтендеров? Или бэку SQL специальные люди писать должны для взаимодействия с БД? Вот это сегрегация!
Если у тебя в проекте такая ДЫРИЩА в бэке, что туда пользователь может просунуть свой... SQL-запрос, то тут не DBA виноват, а косорукий программист, который не понимает, что такое валидация параметров, как правильно экранировать входные данные в SQL и как правильно пользоваться API используемой БД.
Как-то у тебя все так намешано, что я уже пожалел что взялся отвечать. Приплел зачем то ДБА, хотя они тут вообще не при чем. Почему то предположил что должны писать фронтендеры, хотя в посте прямо указано кто это должен делать (да и в твоем первом сообщении тоже). Упомянули какие то АПИ к базам данных, которого в некоторых случаях просто не существует. У СУБД Оракл такого точно нет. И что не так в специальных людях для написания логики работы с данными, я так и не понял. Для меня слово "сегрегация" не ругательное. Или разделение на бек и фронтенд - тоже зло?
Ок, фронтендера я помянул в сердцах. Но в посте-то речь про SQL-инъекции. Причем тут логика внутри СУБД?
Делать так, чтобы SQL-инъекции были невозможными - это задача бэкенд-разработчика. АПИ у БД, конечно же, есть у любой. Для чего бы кому-то пригодилась база данных без интерфейса? На всякий случай напомню, что интерфейс - это не обязательно что-то графическое. В данном случае API - это программный интерфейс и работать он может через вызовы функций динамической библиотеке или через промежуточный биндинг к тому или иному языку. В конечном итоге почти любая современная БД обычно предосталяет API через TCP-соединение.
Но давайте всё же подумаем какие такие SQL-инъекции могут оказаться на совести разработчика БД... Вообще тот еще вопрос что разрабатывает этот разработчик в отрыве от бэкенда. Струкутуру? Связи? Индексы? Ок. Засовывает бизнес логику в хранимые процедуры (такая себе идея, конечно, особенно если это все живёт вне системы контроля версий)?
Короче, если пользователи могут подать куда-то на вход данные, которые поломают нормальную работу SQL сформировав недопустимый запрос, то это проблема бэкенд разработчика, который неправильно работает с API БД или техлида проекта, который допустил прямой доступ пользователей к выполнению запросов в БД, а разработчик хранимок наваял там такой логики, что без должного экранирования наконкатенировал там запросов, способных при должной инъекции поломать всё.
Что живет вне системы контроля версий, а что внутри, вообще не должно влиять на архитектуру систему, это сугубо проблемы разрабов и и удобство их работы. Писать говно код потому что так удобнее, как раз таки и есть так себе идея. Код из хранимок вполне нормально хранится в системах контроля версий, потому что представляет собой обычный текст.
Ничто лучше субд не справляется с работой с данными, поэтому всю логику работы с данными как раз таки должно хранить на уровне субд, если эта логика обещает быть сколько-нибудь сложной (а она почти всегда становится такой, когда у заказчика возникает больше хотелок). А ведь есть еще процессы, который должны запускаться регулярно по ночам (джобы, короче говоря), их тоже выносить из хранимок и хранить то что работает только в бд за пределами этой самой бд? Как тебе такая идея? А как тебе идея хранить в бэк енде функции, которые используются в фильтрах запроса? А если они используются в function-based индексах? А если функция кроме как в запросах больше нигде не используются и ей не плохо нацепить pragma udf, такую тоже хранить на бэк енде?
И именно разработкой этих хранимок и занимается разработчик БД. И я никогда не называю хранимки как API к базе, так как они являются таким же кодом проекта как и все остальное и оно не поставляется вместе с субд. И эти хранимки сложно использовать коряво, т.к. ты просто передаешь параметры и получаешь результаты в виде курсоров или готовых значений (или кодов ошибок). И если разработчик хранимок "наваял там такой логики, что без должного экранирования наконкатенировал там запросов, способных при должной инъекции поломать всё" то это проблема разработчика хранимок, а не бэк-ендера, который эту хранимку тупо вызвал.
Ух... че-то я шевельнул...
Что живет вне системы контроля версий, а что внутри, вообще не должно влиять на архитектуру систему, это сугубо проблемы разрабов и и удобство их работыНа архитектуру влиять не должно - это да, но не хранить ВЕСЬ код в системе контроля версий того или иного проекта - это дилетантство.
Писать говно код потому что так удобнее, как раз таки и есть так себе идеяПричем тут говнокод? Говнокод можно написать и хранить где угодно. Речь не об этом. Есть еще и говноархитектура.
Код из хранимок вполне нормально хранится в системах контроля версий, потому что представляет собой обычный текст.Отлично. Я рад, что вы это понимаете. А-то есть чудаки мудрые, которые держат и редактируют код хранимок исключительно и напрямую в БД, а не накатывают в рамках миграций на чистую базу.
Ничто лучше субд не справляется с работой с данными, поэтому всю логику работы с данными как раз таки должно хранить на уровне субд, если эта логика обещает быть сколько-нибудь сложной (а она почти всегда становится такой, когда у заказчика возникает больше хотелок).СТОП, ЧТО!!!
В смысле хранить логику в БД?! БД - это база данных, там данные нужно хранить. Ещё там приходится хранить структуру (таблицы, связи, индексы), некоторые складывают в БД хранимые процедуры. Первоисточник их лежит в коде и код при деплое умеет их накатывать вместе со структурой с помощью миграций. Если у вас в БД лежит код хранимок, которого нет в системе контроля версий и в миграциях, то этот код временный для экспериментов или какой-то аварийной аналитики. Иначе вы рискуете разъехаться логикой с бэкендом. Разработчики-то сидят на разных ветках и версиях, а еще есть CI\CD, интеграционные тесты и прочее. Они могут работать со стейджинговыми БД, бэкапами и срезами.
Можно какую-то логику помещать в БД, но помещаться оно туда должно в рамках какого-то процесса деплоя и с отслеживанием версий.
хранить то что работает только в бд за пределами этой самой бд? Как тебе такая идея?Отличная идея! Хранить код нужно в системе контроля версий. Размещаться в точке его выполнения код должен в рамках процесса деплоя.
я никогда не называю хранимки как API к базе, так как они являются таким же кодом проекта как и все остальное и оно не поставляется вместе с субдЯ тоже не называл ваши хранимки API. API - это интерфейс выполнения SQL-запросов к БД и получения результатов.
И если разработчик хранимок "наваял там такой логики, что без должного экранирования наконкатенировал там запросов, способных при должной инъекции поломать всё" то это проблема разработчика хранимок, а не бэк-ендера, который эту хранимку тупо вызвал.Это исключительно проблема техлида, который не провел ревью и не надавал по шапке за такие уязвимости. Передавать паремтры в любые запросы к БД нужно либо через специальные механизмы передачи параметров в рамках API, либо очень тщательно очищая и валидируя их на бэке.
Спасибо за комментарии, которые в основном правда представляют собой цепляние к словам.
Но что сказать то всем этим хотел? Что кроме говнокода есть говноархитектура? Ну если детализировать, то да.
Прицепился к слову "хранить", и все сообщение доказывал что хранить нужно в системе контроля версий. Как будто с этим кто то спорил. Рассказывал про правильный деплой, как он работает и прочее. Но как это все отвечает на вопрос "кто наговнокодил так, что возникла возможность sql-инъекций"? Ведь суть разговора, напомню, была именно в этом.
P.S. API к БД как "интерфейс выполнения sql-запросов" я добавлю в свою коллекцию перлов, с твоего позволения.
Добавь лучше к перлам своё изречение, будто у БД не бвывает API и мысль, будто бы хранимки - это API. Тут не цепляние уже
Мысль, будто хранимки - это API пришла мне после прочтений твоих высказываний. Без твоего помощи мне бы это в голову не пришло. Мыслей наподобие той, что компилятор pl/sql который выполняет команду create or replace package - это оказывается API. И парсер sql-запроса, это тоже API. Почитай что ли вначале что такое API, а потом уже заявляй что взаимодействие с базой происходит через него. И вообще видимо если что то с чем взаимодейтсвует, то обязательно через API.
А потом еще можно будет обсудить перлы о том, stored procedure из БД должна храниться (stored) вовсе не в бд, а в vcs. И должны появляться в базе после деплоя, и вообще называться видимо deployed procedure.






IT-юмор
7.1K пост53.2K подписчиков
Правила сообщества
Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору