Re[35]: Процедуры в БД - это же ужас-ужас!!!
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.11.19 05:03
Оценка:
Здравствуйте, amironov79, Вы писали:

A>Может выйти за пределы сервера базы в систему: работать с файлами, запускать процессы с правами системного пользователя, под которым работает субд.

Совершенно не факт, что СУБД работает под какими-то более широкими правами, чем тот же самый апп-сервер.

Думаю, там есть система прав доступа, которую надо настраивать. В том же oracle для работы с java надо гонять приложение и смотреть, какие права требуются, вплоть до разрешения подключиться к любому удаленному узлу:
A>
A>dbms_java.grant_permission('APPUSER', 'java.lang.RuntimePermission', 'getClassLoader', '');
A>dbms_java.grant_permission('APPUSER', 'java.io.FilePermission', '/tmp', 'read');
A>dbms_java.grant_permission('APPUSER', 'java.net.SocketPermission', 'sql-server:1433', 'connect,resolve');
A>

Ну да, конечно же там работает песочница — как и везде. Но ещё раз: что такого ценного вы видите на сервере СУБД, что более ценно, чем сама база данных?
Там самый главный файл — это собственно БД, только она денег и стоит. Человек, который может задеплоить произвольный код в сервер приложений, прекрасно дампнет вашу базу конкурентам безо всякой кодогенерации.

Основной риск — это code injection, когда злоумышленником выступает не программист, а внешний пользователь. Ну так опять же — drop table customers он вам заинжектит и через обычный DML, даже если прав на динамическое развёртывание кода у него нету.

Ну и опять же — тот же самый .jsp весь построен на том, что есть контейнер, который автоматически порождает .java по .jsp-разметке и компилирует её на лету. То есть у апп-сервера хватает прав на динамическое порождение кода; но это никого не пугает — ведь все пути порождения такого кода аккуратно закрыты: права "быренько создать bypasssecuritycheck.jsp" у самого jsp нету, поэтому обычной механики проверки прав на развёртывание вполне хватает.
Так и развёртывание встроенного в СУБД кода можно вынести из прикладного кода — когда .jsp означает не "java server page", а "java stored procedure", и вся эта ботва компилируется и развёртывается в БД контейнером, который полностью аналогичен резине или томкэту.

Основное препятствие тут — "это ещё не сделано"
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.