新潟県公文書データ10万件超消失を振り返る
事件当時に書いてそのまま寝かせてた。忘れた頃だが公開しておく。
報道
報道の要点の抜粋
4/22 第1報道
データの大半が県内部の意思決定などに使われる資料で、県は県民への直接的な影響は小さいとみている。
県によると、消失したのは3月24〜31日にシステムに登録されたファイルの一部
4/24 「拡張子が大文字なのは仕様なのか?」
県では、データの集計作業のためにマクロ付のExcelを使用しているという。このマクロは拡張子が小文字でないと正常に動作しない仕様だった。一方、公文書管理システムの仕様では拡張子を大文字とするのが標準になっている。
県は富士電機ITソリューションズに対し「拡張子が大文字なのは仕様なのか」という趣旨の質問をしたという。最終的には拡張子を小文字に変更することになり、結果としてファイルが消去された。
では、なぜ拡張子の変更でデータ削除が起きたのか。県によると、データ削除プログラムは、登録されたファイルのリストを参照してリストにないファイルを削除する仕組みだという。新機能により拡張子が変換されたことで、該当ファイルの名前がリストに記載されていないことになり、10万件のデータが削除されたとしている。
5/10 復旧したのは2.5万件
消失したファイルの数は計10万3389件。復旧できたファイル数は2万5439件、復旧できなかったのは7万7950件という。
何をしたか?何が起こったか?
- ストレージ上の物理ファイルをおそらく手作業で直接リネームした。
- リネームしたあとのファイル名が、何らかのリスト(「登録されたファイル名」としか書いてない)に適合しなくなった。
- 適合しなかったファイルを削除した
ここで疑問が出てくる。なぜそんな削除処理があるのか?
「保存しなければならないファイル」だけを置いてるのではないのか?
システムの処理内容を想像する。
ここからシステム全体の構成を推測してみる。
- まず公文書管理システムはWebベースだと思われる。類似のシステムは多数ある。例えば OneDrive Google Drive等のことだ。
- 履歴付きファイルサーバの可能性もなくもないが、開発が面倒だし、多分こんな話になってない
- ファイルのアップロード処理で、フレームワーク側でテンポラリファイルを作成することはよくある。概ねランダムなファイル名がつけられる
- 例えばPHPでは /tmp/phpXXXXXX
- アップロード成功時に、それを適切なファイル名にリネームして「公文書データとして保存」する。
- 同時に、データベースにファイル名を登録する。これが「登録されたファイル名」だと思われる。
- ファイルサーバの体だと作成してきたファイルを鵜呑みにするしかないので、その点でもWebベースだと思われる。
- 同時に、データベースにファイル名を登録する。これが「登録されたファイル名」だと思われる。
問題はここからで
- このテンポラリファイルと、公文書ファイルが、同じディレクトリに混在するような造りになっており
- テンポラリファイルだけを削除したかったのだが、ファイル名ランダムのため特定しにくい。
- 次善策として、データベースの中身と照合する処理を採った。
こんなところだと思われる。
根拠はないし、もちろんふつーはそんな造りにはしない。小生はやらない。
しかしそう考えれば辻褄はあう。それだけだ。
どうすればよかったのか?
方法は色々あるがシステムの修正を最小限にするなら
** ダウンロード時に拡張子を小文字に変換して出力する。**
それだけでよかったはずなんだが...
小生が現場にいたらこの提案をしたところだ。
なぜ物理ファイルを直接リネームしてしまったのか。
問題の「リストにないファイルを削除する機能」にもまったく影響はない。
Discussion