Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> backUp DB 
:(
    Опции темы
Stallionf1
Дата 27.4.2011, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 27.4.2011

Репутация: нет
Всего: нет



Доброго времени суток!!!
Подскажите, пожалуйста, как сделать бэкап/восстановление БД (в моем случае, DB Oracle) через веб-приложение??
скажем, "Админ" зашел на сайт и захотел сделал бэкап всей БД (всех зарегистрированных юзеров).
PM MAIL   Вверх
COVD
Дата 28.4.2011, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



Наверное, проще и надежнее поставить программы удаленного доступа (например, RAdmin), соединяться через VPN и делать все, что хотите. Я таким способом соединяюсь из дома с моим рабочим офисным компьютером и всеми серверами, в том числе и с теми, где установлены базы данных.
PM MAIL   Вверх
Stolzen
Дата 28.4.2011, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 3
Всего: 48



Цитата(COVD @  28.4.2011,  02:22 Найти цитируемый пост)
Наверное, проще и надежнее поставить программы удаленного доступа (например, RAdmin), соединяться через VPN и делать все, что хотите. 

Ну если на сервере доступна только командная строка? Да, в таком случае можно подсоединятся через ssh - то же самое получается.

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


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
carper
Дата 28.4.2011, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 2.3.2005

Репутация: 2
Всего: 8



Цитата(Stallionf1 @  27.4.2011,  23:55 Найти цитируемый пост)
Подскажите, пожалуйста, как сделать бэкап/восстановление БД (в моем случае, DB Oracle) через веб-приложение


Вижу три пути:
1. Создать свою программу архивации, размещенную в web каталоге и обращающуюся к базе данных стандартным образом.
И складывать архив в папку находящуюся внутри каталога развернутого приложения.
Тогда не будет никакой разницы откуда запускать архивацию.

Но таким образом вы потратите кучу времени на то, что "из коробки" есть в Oracle.

2. Попробовать все возможные пути экскалации прав удаленного пользователя web приложения с тем чтобы он мог запускать выполняемые файлы на сервере. 

IMHO путь, очень мягко выражаясь, бесперспективный.

3. Не морочить никому голову и удаленно коннектиться к серверу, как это вам уже посоветовали.


PM MAIL   Вверх
Stallionf1
Дата 28.4.2011, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 27.4.2011

Репутация: нет
Всего: нет



наверное я не совсем конкретно поставил вопрос....
Например, АДМИН регистрируется на сайте, входит, и у него есть кнопка "создать копию БД".
Вот что мне делать при нажатии на кнопку? 
и  можете, пожалуйста, поподробнее описать вариант, если писать какой-то скрипт, то как он вообще выполняется (где он должен лежать), а то  если честно не очень я понимаю? спасибо!
PM MAIL   Вверх
Stolzen
Дата 28.4.2011, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 3
Всего: 48



Так в java запускается внешняя программа:
Код

proc = Runtime.getRuntime().exec("./external); 


Этот самый "external" - может быть скрипт. Не знаю, как в Oracle, но, например, в MySQL и Firebird есть программа, позволяющая сделать полный дамп базы - такую вам и нужно запускать из скрипта. В MySQL в результате выходит файл с sql запросом, который может целиком повторить базу - его, скорее всего, нужно будет сжать каким-нибудь gzip. Как скрипт закончил свое выполнение, можно уведомлять пользователя об этом и давать ссылку на полученный файл.


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
carper
Дата 28.4.2011, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 2.3.2005

Репутация: 2
Всего: 8



Цитата(Stolzen @  28.4.2011,  09:08 Найти цитируемый пост)
Так в java запускается внешняя программа:


А вы пробовали через web интерфейс задеплоенного приложения запустить экзешник на сервере, особенно тот, которому еще придется чего то писать/читать вне его каталога web сервера?

Если да, то не поделитесь тем, как это делать, например, под Tomcat ?



Цитата(Stallionf1 @  28.4.2011,  08:36 Найти цитируемый пост)
Например, АДМИН регистрируется на сайте, входит, и у него есть кнопка "создать копию БД".
Вот что мне делать при нажатии на кнопку? 


В общем случае "правильный ответ" - ничего, вы пытаетесь сделать простую задачу бэкапа максимально извращенным способом.

Пункт про права при работе через web приложение, как я понял, вы решили проигнорировать, а зря. smile

Ну, если очень хочется ... 
1. Забудьте про web вообще.

2. Напишите на JAVA метод (ну форум здесь как бы про JAVA, а так на любом подходящем языке, например, PHP), который коннектится к базе, отбирает нужную информацию и пишет ее, например, в какой-то файл.

3. Вспомните, что этот метод будет вызываться из web  smile  и задайте каталог для выгрузки внутри web каталога, куда будет задеплоено вашего приложения, и к которому у вашего метода будет доступ.

4. На кнопку навесьте вызов этого метода.

5. Прикрутите, по желанию, возможность загрузки дампа, например, через другую web страничку.


P.S. Вы не могли бы уточнить какие технологии вы уже применяете для создания вашего web приложения ?
PM MAIL   Вверх
LSD
Дата 28.4.2011, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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.
PM MAIL WWW   Вверх
Stolzen
Дата 28.4.2011, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 3
Всего: 48



Цитата(carper @  28.4.2011,  11:25 Найти цитируемый пост)
А вы пробовали через web интерфейс задеплоенного приложения запустить экзешник на сервере, особенно тот, которому еще придется чего то писать/читать вне его каталога web сервера?

Если да, то не поделитесь тем, как это делать, например, под Tomcat ?


Честно говоря, нет. Но информация в интернете имеется -  ссылка


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
carper
Дата 28.4.2011, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 2.3.2005

Репутация: 2
Всего: 8



Цитата(Stolzen @  28.4.2011,  10:41 Найти цитируемый пост)
Но информация в интернете имеется 


Почитал, я не знаю Perl, но того, что понял достаточно чтобы увидеть, что никакими файловыми операциями и запуском внешних программ там и не пахнет.

С одной стороны вроде как "CGI scripts are used to execute programs external to the Tomcat JVM" с другой, без особых извращений (включая игрища с Java SecurityManager), вы для  Server OS практически никто и звать вас никак.

Полагаю, хотя сам и никогда не пробовал, в конечном итоге систему безопасности можно сломать/"усовершенствовать" и запускать на сервере всё, что угодно, только ЗАЧЕМ ?!

Особенно если учесть, что для этой же задачи существует куча других методов? smile




Цитата(LSD @  28.4.2011,  10:34 Найти цитируемый пост)
скрипт бекапа средствами СУБД


Такой скрипт создается просто, вот только как его запустить?

Ну, вот возьмем такой кусочек с абсолютно элементарными действиями - устраиваем shutdown приложению и
бэками один маленький файлик (для него, кстати, shutdown не обязателен, но оставим как есть) куда-то на 
другой диск сервера:

Код

С:\Ora92\bin\sqlplus.exe  sys/myBase@"password as sysdba" @c:\tools\vekshutdown.sql -s
c:\tools\arj32\arj32 a -r -hk1 -h# c:\Backup\daily\vekpfile G:\dbvek\pfile\*.*                 


Не подскажете как выполнить через web приложение?

Как вариант, можно попробовать поизощряться с созданием задач в самом Oracle, наверное, может получиться, но зачем такое извращение?


P.S. Вообще задача web сервера максимально ограничить возможность внешнего пользователя хоть что-то делать вне доступного ему выделенного пространства. 
Пытаться самому сломать такое поведение кажется не очень разумным, нет?
PM MAIL   Вверх
LSD
Дата 28.4.2011, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 5
Всего: 538



Для начала, это не бекап, это импорт/экспорт smile
Что мешает выполнить 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.
PM MAIL WWW   Вверх
Stallionf1
Дата 28.4.2011, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 27.4.2011

Репутация: нет
Всего: нет



Цитата(carper @ 28.4.2011,  10:25)
P.S. Вы не могли бы уточнить какие технологии вы уже применяете для создания вашего web приложения ?

технологий типа Hibernate, Spring не использую!
1)графическое представление (JSP+Servlets)
2)отдельными классами описываю логику
3)доступ к БД через DAO (Data Access Object)

Добавлено через 2 минуты и 54 секунды
Цитата(LSD @ 28.4.2011,  10:34)
Если речь идет именно о бекапе, а не импорт/экспорт, я бы делал так:
- создать скрипт бекапа средствами СУБД
- вызывать его из приложения

да, речь идет именно о бэкапе / рэсторе.

так как же скрипт вызвать, каким макаром?
PM MAIL   Вверх
carper
Дата 28.4.2011, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 2.3.2005

Репутация: 2
Всего: 8



Цитата(LSD @  28.4.2011,  14:02 Найти цитируемый пост)
Тот же томкат никаких security manager не устанавливает. Единственное скрипт будет работать долго, и надо его вынести в отдельный поток. 


Не устанавливает, только вот не запускать же боевой сервис Tomcat от админа, а дав права JAVA хозяйничать на компьютере не будет ли странно не поднять там  security manager? 


(Хотя, каюсь, пока сейчас не поборол лень и не попробовал на своей машине, полагал, что всё еще хуже.   smile )


У меня на машине под разработку, 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, для безопасности.


Цитата(LSD @  28.4.2011,  14:02 Найти цитируемый пост)
 и надо его вынести в отдельный поток. 


Ага, а еще надо будет учесть, что если это не Tomcat, то сервер может очень не полюблять потоки, которые не он сам запускает. smile
PM MAIL   Вверх
LSD
Дата 29.4.2011, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 5
Всего: 538



Давайте все же разберемся с терминологией. Бекап это физическое копирование файлов базы данных. Из бекапа базу можно восстановить даже если будут повреждены файлы базы и она вообще не будет запускаться. Импорт/экспорт это копирование данных из таблицы(таблиц) в файл. И соответственно восстановить можно только работающую базу и то лишь частично.

Для импорта/экспорта нужны лишь права в базе и место куда писать файлы экспорта.

Для "ручного" бекапа Оракла нужны права в СУБД, доступ на чтение файлов базы и журнала и место куда писать файлы бекапа. Либо права на выполнение rman или скрипта.



Цитата(carper @  28.4.2011,  15:59 Найти цитируемый пост)
"For optimal security, the service should be run as a separate user, with reduced permissions".

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



Цитата(carper @  28.4.2011,  15:59 Найти цитируемый пост)
Ага, а еще надо будет учесть, что если это не Tomcat, то сервер может очень не полюблять потоки, которые не он сам запускает.

В таком случае там точно есть какой нибудь шедуллер. smile 


--------------------
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.
PM MAIL WWW   Вверх
carper
Дата 29.4.2011, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 2.3.2005

Репутация: 2
Всего: 8



Цитата(LSD @  29.4.2011,  12:28 Найти цитируемый пост)
Можно создать .sh файл который будет выполняться с правами другого пользователя, а томкатовскому пользователю дать право на выполнение и все.


Хм... Наверное можно. Можно и в Windows устроить что-то типа run as.

Но я о чем сейчас подумал...  Это значится, достаточно будет злоумышленнику узнать адрес нужной странички, перехватить пароль и он в любой момент может уронить базу на время ненужного бэкапа?

OK. Мы так не хотим, поднимаем security, работаем через HTTPS и т.д. и т.п. и все это  ради того, чтобы иметь возможность 
таки нажать кнопочку именно через web морду.

Еще немного извращений чтобы убедиться в том, что бэкап нормально сложился и база нормально рестартовала,  потом продумываем как все же быть, если база нормально не перезапустилась или бэкап непонятно почему не сложился, приходим к необходимости нормального удаленного доступа, а получив оный "вдруг" задумываемся -  нафига нам был нужен этот баян с кнопкой ?



Цитата(LSD @  29.4.2011,  12:28 Найти цитируемый пост)
В таком случае там точно есть какой нибудь шедуллер


Более того шедулер есть и в самом Oracle и можно его как-то "заводить"  в ответ на нажатие кнопки, да собственно и cron можно использовать, не терзая web сервер вообще. smile

Вопрос все тот же - а на фига такие сложности?



Цитата(LSD @  29.4.2011,  12:28 Найти цитируемый пост)
Давайте все же разберемся с терминологией.


А в чем разбираться? У нас тут разногласий нет.
Или я где-то чего-то про export/import сказал (посмотрел, вроде как не нашел, а тот кусочек кода, что приводил - это как раз начало скрипта холодного бэкапа - команда на shutdown и архивация файла параметров) ?

Я так понял, что автору нужен полноценный бэкап, скорее всего cold, со всеми вытекающими правами.


P.S. 
Полагаю тема получилась любопытная - лично я пришел к выводу, что если забывать о безопасности web сервера, то можно попасть на такой вот getRuntime().exec  и очень потом переживать.  smile
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0597 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.