2016-07-28 4 views
1

В соответствии с этим объяснением [1], как можно восстановить удаленные записи из базы данных SQLite, при удалении записи происходит две вещи: добавлена ​​область, содержащая удаленную запись в свободный список (как свободный блок), а «заголовок» в области содержимого перезаписывается.SQLite3: удалить запись без перезаписи с нулевыми байтами

Само по себе содержимое (или только несколько байтов) перезаписано, например, открыв файл базы данных шестнадцатеричным редактором, вы все равно можете видеть части удаленной записи.

Так, чтобы проверить, правда ли это или нет, вот минимальный примера:

sqlite3 example.db 

sqlite> CREATE TABLE 'test'(aColumn VARCHAR(25)); 
sqlite> INSERT INTO test VALUES('AAAAAAAAAA'); 
sqlite> INSERT INTO test VALUES('BBBBBBBBBB'); 
sqlite> INSERT INTO test VALUES('CCCCCCCCCC'); 
sqlite> DELETE FROM test WHERE aColumn = 'BBBBBBBBBB'; 

Что я ожидаю сейчас, что - открытие файла с шестнадцатеричным редактором - между КЦИКАМИ ... и АААА ... есть все еще некоторые Bs (но некоторые байты перед Bs или первые несколько Bs должны были быть перезаписаны). Что действительно происходит, так это то, что вся область с Bs была перезаписана нулевыми байтами.

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

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

Мне нужно создать мои SQLite-базы данных таким образом, чтобы иметь возможность восстановить удаленные записи (или их части) с помощью средств судебной экспертизы.

[1] http://sandersonforensics.com/forum/content.php?222-Recovering-deleted-records-from-an-SQLite-database

ответ

Смежные вопросы