MDBファイルへのアクセス不正



CDaoDatabase::Open をコールすると、例外発生。
エラーの内容を確認すると、
「ファイルをロックできませんでした。」
との事。


原因は、MDB を開いた場合に作成されるロックファイルにあった。
MDBファイル を Open すると LDB というファイル
MDB と拡張子を除いたファイル名が等しい)が作成される。
このファイル正常にプログラムを終了させた場合
(CDaoDatabase::Closeを呼び出す)には
DAO が自動的に削除してくれるらしい。
だが、呼び出さずに終わらせた場合そのファイルが残ってしまっていた。


つまるところ、このファイルが原因でセキュリティ関連の問題が
発生していたっぽい。


この状態で、権限の低いユーザで再ログインを行いそのプログラムを
鼓動させる。
DAO は、先ほどと同様に MDB に対して接続を行う。
MDB ファイルを Open し、LDB ファイルを作成・・・しようとすると
権限が無くて失敗。


結局、Open後に LDB ファイルに対して EVERYONE 権限を加えてやる
事で対応 OK だった。
必ず Close が呼ばれるようなコードを作成するのが正しい対応な
気もするが・・・。
時間がかかるので却下。
駄目か?




余談だが、これの例外、try...catch で括っていなかった為に
MFC の上位部分で cahtch されていた。
(勝手に catch するなと・・・)
おかげで例外が発生した事にも気づけず、不思議な挙動を行う
ログを見ながら四苦八苦。


try ... catch が便利なのは想像つくのだが、
こういうのがあるから嫌いだ。
巧く使っているサンプルソースを見てみたいな。
プログラム観が変わるような奴。