![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Stallionf1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 27.4.2011 Репутация: нет Всего: нет |
Доброго времени суток!!!
Подскажите, пожалуйста, как сделать бэкап/восстановление БД (в моем случае, DB Oracle) через веб-приложение?? скажем, "Админ" зашел на сайт и захотел сделал бэкап всей БД (всех зарегистрированных юзеров). |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Наверное, проще и надежнее поставить программы удаленного доступа (например, RAdmin), соединяться через VPN и делать все, что хотите. Я таким способом соединяюсь из дома с моим рабочим офисным компьютером и всеми серверами, в том числе и с теми, где установлены базы данных.
|
|||
|
||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 3 Всего: 48 |
Ну если на сервере доступна только командная строка? Да, в таком случае можно подсоединятся через ssh - то же самое получается. Вообще, я бы написал какой-нибудь скрипт, например, на питоне, который бы запускался, когда администратор нажимает по ссылке и через некоторое время отправляет на имейл ссылку на заархивированный дамп базы. |
|||
|
||||
| carper |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 2 Всего: 8 |
Вижу три пути: 1. Создать свою программу архивации, размещенную в web каталоге и обращающуюся к базе данных стандартным образом. И складывать архив в папку находящуюся внутри каталога развернутого приложения. Тогда не будет никакой разницы откуда запускать архивацию. Но таким образом вы потратите кучу времени на то, что "из коробки" есть в Oracle. 2. Попробовать все возможные пути экскалации прав удаленного пользователя web приложения с тем чтобы он мог запускать выполняемые файлы на сервере. IMHO путь, очень мягко выражаясь, бесперспективный. 3. Не морочить никому голову и удаленно коннектиться к серверу, как это вам уже посоветовали. |
|||
|
||||
| Stallionf1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 27.4.2011 Репутация: нет Всего: нет |
наверное я не совсем конкретно поставил вопрос....
Например, АДМИН регистрируется на сайте, входит, и у него есть кнопка "создать копию БД". Вот что мне делать при нажатии на кнопку? и можете, пожалуйста, поподробнее описать вариант, если писать какой-то скрипт, то как он вообще выполняется (где он должен лежать), а то если честно не очень я понимаю? спасибо! |
|||
|
||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 3 Всего: 48 |
Так в java запускается внешняя программа:
Этот самый "external" - может быть скрипт. Не знаю, как в Oracle, но, например, в MySQL и Firebird есть программа, позволяющая сделать полный дамп базы - такую вам и нужно запускать из скрипта. В MySQL в результате выходит файл с sql запросом, который может целиком повторить базу - его, скорее всего, нужно будет сжать каким-нибудь gzip. Как скрипт закончил свое выполнение, можно уведомлять пользователя об этом и давать ссылку на полученный файл. |
|||
|
||||
| carper |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 2 Всего: 8 |
А вы пробовали через web интерфейс задеплоенного приложения запустить экзешник на сервере, особенно тот, которому еще придется чего то писать/читать вне его каталога web сервера? Если да, то не поделитесь тем, как это делать, например, под Tomcat ?
В общем случае "правильный ответ" - ничего, вы пытаетесь сделать простую задачу бэкапа максимально извращенным способом. Пункт про права при работе через web приложение, как я понял, вы решили проигнорировать, а зря. Ну, если очень хочется ... 1. Забудьте про web вообще. 2. Напишите на JAVA метод (ну форум здесь как бы про JAVA, а так на любом подходящем языке, например, PHP), который коннектится к базе, отбирает нужную информацию и пишет ее, например, в какой-то файл. 3. Вспомните, что этот метод будет вызываться из web 4. На кнопку навесьте вызов этого метода. 5. Прикрутите, по желанию, возможность загрузки дампа, например, через другую web страничку. P.S. Вы не могли бы уточнить какие технологии вы уже применяете для создания вашего web приложения ? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 5 Всего: 538 |
Если речь идет именно о бекапе, а не импорт/экспорт, я бы делал так:
- создать скрипт бекапа средствами СУБД - вызывать его из приложения -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 3 Всего: 48 |
Честно говоря, нет. Но информация в интернете имеется - ссылка |
|||
|
||||
| carper |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 2 Всего: 8 |
Почитал, я не знаю Perl, но того, что понял достаточно чтобы увидеть, что никакими файловыми операциями и запуском внешних программ там и не пахнет. С одной стороны вроде как "CGI scripts are used to execute programs external to the Tomcat JVM" с другой, без особых извращений (включая игрища с Java SecurityManager), вы для Server OS практически никто и звать вас никак. Полагаю, хотя сам и никогда не пробовал, в конечном итоге систему безопасности можно сломать/"усовершенствовать" и запускать на сервере всё, что угодно, только ЗАЧЕМ ?! Особенно если учесть, что для этой же задачи существует куча других методов? Такой скрипт создается просто, вот только как его запустить? Ну, вот возьмем такой кусочек с абсолютно элементарными действиями - устраиваем shutdown приложению и бэками один маленький файлик (для него, кстати, shutdown не обязателен, но оставим как есть) куда-то на другой диск сервера:
Не подскажете как выполнить через web приложение? Как вариант, можно попробовать поизощряться с созданием задач в самом Oracle, наверное, может получиться, но зачем такое извращение? P.S. Вообще задача web сервера максимально ограничить возможность внешнего пользователя хоть что-то делать вне доступного ему выделенного пространства. Пытаться самому сломать такое поведение кажется не очень разумным, нет? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 5 Всего: 538 |
Для начала, это не бекап, это импорт/экспорт
Что мешает выполнить Runtime.exec() внутри сервлета? Тот же томкат никаких security manager не устанавливает. Единственное скрипт будет работать долго, и надо его вынести в отдельный поток. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Stallionf1 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 27.4.2011 Репутация: нет Всего: нет |
технологий типа Hibernate, Spring не использую! 1)графическое представление (JSP+Servlets) 2)отдельными классами описываю логику 3)доступ к БД через DAO (Data Access Object) Добавлено через 2 минуты и 54 секунды
да, речь идет именно о бэкапе / рэсторе. так как же скрипт вызвать, каким макаром? |
||||
|
|||||
| carper |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 2 Всего: 8 |
Не устанавливает, только вот не запускать же боевой сервис Tomcat от админа, а дав права JAVA хозяйничать на компьютере не будет ли странно не поднять там security manager? (Хотя, каюсь, пока сейчас не поборол лень и не попробовал на своей машине, полагал, что всё еще хуже. У меня на машине под разработку, Tomcat сидит от имени локального админа, никакого security manager и там Runtime.exec() выполняется на ура. Но разве тоже будет на рабочем Tomcat? http://tomcat.apache.org/tomcat-5.5-doc/setup.html "For optimal security, the service should be run as a separate user, with reduced permissions". И вот с этим-то пользователем и начнет получаться кавардак с правами и, IMHO, необходимостью задействовать security manager, для безопасности. Ага, а еще надо будет учесть, что если это не Tomcat, то сервер может очень не полюблять потоки, которые не он сам запускает. |
|||
|
||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 5 Всего: 538 |
Давайте все же разберемся с терминологией. Бекап это физическое копирование файлов базы данных. Из бекапа базу можно восстановить даже если будут повреждены файлы базы и она вообще не будет запускаться. Импорт/экспорт это копирование данных из таблицы(таблиц) в файл. И соответственно восстановить можно только работающую базу и то лишь частично.
Для импорта/экспорта нужны лишь права в базе и место куда писать файлы экспорта. Для "ручного" бекапа Оракла нужны права в СУБД, доступ на чтение файлов базы и журнала и место куда писать файлы бекапа. Либо права на выполнение rman или скрипта.
Можно создать .sh файл который будет выполняться с правами другого пользователя, а томкатовскому пользователю дать право на выполнение и все.
В таком случае там точно есть какой нибудь шедуллер. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| carper |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 2 Всего: 8 |
Хм... Наверное можно. Можно и в Windows устроить что-то типа run as. Но я о чем сейчас подумал... Это значится, достаточно будет злоумышленнику узнать адрес нужной странички, перехватить пароль и он в любой момент может уронить базу на время ненужного бэкапа? OK. Мы так не хотим, поднимаем security, работаем через HTTPS и т.д. и т.п. и все это ради того, чтобы иметь возможность таки нажать кнопочку именно через web морду. Еще немного извращений чтобы убедиться в том, что бэкап нормально сложился и база нормально рестартовала, потом продумываем как все же быть, если база нормально не перезапустилась или бэкап непонятно почему не сложился, приходим к необходимости нормального удаленного доступа, а получив оный "вдруг" задумываемся - нафига нам был нужен этот баян с кнопкой ? Более того шедулер есть и в самом Oracle и можно его как-то "заводить" в ответ на нажатие кнопки, да собственно и cron можно использовать, не терзая web сервер вообще. Вопрос все тот же - а на фига такие сложности? А в чем разбираться? У нас тут разногласий нет. Или я где-то чего-то про export/import сказал (посмотрел, вроде как не нашел, а тот кусочек кода, что приводил - это как раз начало скрипта холодного бэкапа - команда на shutdown и архивация файла параметров) ? Я так понял, что автору нужен полноценный бэкап, скорее всего cold, со всеми вытекающими правами. P.S. Полагаю тема получилась любопытная - лично я пришел к выводу, что если забывать о безопасности web сервера, то можно попасть на такой вот getRuntime().exec и очень потом переживать. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |