Как безопасно удалить строку из базы данных? - PullRequest
4 голосов
/ 12 марта 2009

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

База данных, которую мы используем, это postgres 8.x,

Могу ли я что-нибудь сделать, кроме регулярного запуска КОМПАКТ / ВАКУУМ?

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

Ответы [ 6 ]

2 голосов
/ 12 марта 2009

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

Рассмотрим регулярное удаление и периодический ВАКУУМ, которые вы упомянули ранее.

1 голос
/ 12 марта 2009

Чтобы выполнить «D» в ACID, реляционные базы данных используют систему типов журнала транзакций для изменений в базе данных. Когда выполняется удаление, это удаление производится в копию данных в памяти (буферный кэш), а затем записывается в файл журнала транзакций в синхронном режиме. В случае сбоя базы данных журнал транзакций будет воспроизведен, чтобы вернуть систему в правильное состояние. Таким образом, удаление существует в нескольких местах, где оно должно быть удалено. Только через некоторое время запись «удаляется» из фактического файла данных на диске (и любых индексов). Это количество времени варьируется в зависимости от базы данных.

1 голос
/ 12 марта 2009

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

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

Возможно, вам следует уточнить, почему такое безвозвратное удаление желательно ...?

1 голос
/ 12 марта 2009

Делаете ли вы резервную копию вашей базы данных? - Если да, обязательно удалите его из резервных копий тоже.

Это из-за угрозы безопасности? В этом случае я бы изменил данные в строке, а затем удалил строку.

0 голосов
/ 12 марта 2009

Как насчет перезаписи записи случайными символами / датами / числами и т. Д.?

0 голосов
/ 12 марта 2009

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

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