ファイルを検索して、一般的なファイル情報のほかファイルハッシュ値を取得できるSQL Server用拡張ストアドプロシージャxp_sha1_findを試作してみました。ディスクの全ファイル12万個12GBのファイルのハッシュ値を例のおんぼろマシン(PⅢ-1G 512MB RAM)で求めさせたら、1時間半かかってしまいました。結果はopenssl sha1 filenameと比べて同じであったので間違いはないと思うんですが、ちょっと時間がかかりすぎで実用性には問題がありそうです。でかいファイルは読み込み時メモリの確保に失敗するので分割するためのバッファサイズを引数に指定できるようにしました。テーブルにファイル情報とハッシュ値を保存すればSQLでファイルの改ざんを検出できる。。かもしれないです。SQL Server 7.0に対応しようと思ったらvarbinaryで「数値が大きすぎます」というODBCエラーが出てしまいます。そういえばxp_findでdecimal型の送出で同じエラーに見舞われて結局SQL Server7.0用を作成しnvarcharを使用したことがあるので今度は何とかなんないかなーなんて思っています。MSのSQL7の技術文書を見るとSRVVARBINARYは255までしか使えないのでSRVBIGVARBINARYを使うようにと書いてあったので使えるはずなのですがどうしてもうまくいきません。もう何日もそれで悩みっぱなしです。
(このネタはYamaKenさんのリクエストです。ありがとうございました)
※上記の件(varbinaryで「数値が大きすぎます」というODBCエラー)、単なる凡ミスでした。ブツは本日(2005年1月4日)アップロードしたので来週の水曜か土曜にはベクターさんで公開されると思います。