dropDatabase вызывается отдельно для всех баз данных в mongoDB с наборами реплик.

Мы используем mongoDB в качестве СУБД для нашей производственной базы данных. Мы включили 2 набора реплик для нашей БД.

Совершенно неожиданно мы заметили, что обе базы данных в нашем производстве были удалены. Мы абсолютно уверены, что никто, имеющий доступ, этого не делал. Когда мы просмотрели журналы, мы заметили, что dropDatabase в обеих базах данных действительно был вызван. Однако мы не смогли найти какие-либо записи журнала для установления соединения. Если кто-то использовал mongo shell или bash для удаления БД, должны были быть журналы и для новых подключений.

Выписка журнала для первичного:

2017-08-17T14:38:47.019+0000 I -        [conn527] AssertionException handling request, closing client connection: 17132 SSL handshake received but server is started without SSL support
2017-08-22T00:18:22.694+0000 I COMMAND  [conn541] dropDatabase db1 starting
2017-08-22T00:18:22.708+0000 I COMMAND  [conn541] dropDatabase db1 finished
2017-08-22T00:18:23.832+0000 I COMMAND  [conn542] dropDatabase db2 starting
2017-08-22T00:18:23.843+0000 I COMMAND  [conn542] dropDatabase db2 finished 

Как видно из метки времени в первой строке, за последние 5 дней не было установлено ни одного нового соединения с сервером mongo.

Может кто-нибудь, пожалуйста, помогите нам понять, что именно произошло с нашим сервером mongodb. Кроме того, любые указатели будут с благодарностью.


person thrust    schedule 22.08.2017    source источник
comment
Чтобы узнать, кто был соединением 541, выполните поиск по журналам mongodb (если у вас достаточно файлов журнала) grep -R "\#541" *.log   -  person JJussi    schedule 23.08.2017
comment
У нас есть журналы за последние 3 месяца, и мы не смогли найти ни одного соединения 541 или 542. Не могли бы вы дать нам какой-нибудь другой указатель?   -  person thrust    schedule 23.08.2017
comment
Это очень странно, потому что все подключения, принятые из событий x.x.x.x, регистрируются нормально. И ваши старые файлы, которые вы grep не были «zip» (просто проверяли). Затем «кто-то» удалил эту строку.   -  person JJussi    schedule 23.08.2017
comment
Это действительно странно. Я распаковал все файлы перед запуском grep. Что меня сбивает с толку, так это то, что идентификатор соединения для двух запросов на удаление отличается. Если кто-то получил несанкционированный доступ к экземпляру, вполне возможно, что он/она удалил операторы журнала. Однако я не думаю, что кто-то будет держать соединение открытым в течение недели или более, чтобы позже запустить dropDatabase в базе данных. Таким образом, журналы подключений должны были быть в том же файле.   -  person thrust    schedule 23.08.2017


Ответы (1)


Если ваш экземпляр все еще работает, вы можете выпустить

db.adminCommand( { getLog: "global" } )

для того, чтобы узнать, что случилось. Команда getLog считывает Журнал MongoDB из ОЗУ, а не из файла журнала - на случай, если кто-то подделал файл журнала даже...

person dnickless    schedule 22.08.2017
comment
Большое спасибо за ваше предложение. Однако мы перезапустили сервер ранее. Так что, боюсь, это не поможет. Вы имеете в виду какой-либо другой указатель? - person thrust; 23.08.2017