日常~おまけ雑記~

日常にほんの少し活力を~毎日の出来事やオーディオなど趣味のことを紹介するブログです



accessのVBAモジュールパスワードがわからない時の解除方法

ACCESSVBAモジュールを編集したい時、パスワードでロックされていて、VBAが開けない時があります。

人から引き継いだACCESSだったり、パスワードを失念したりしてVBAモジュールが編集できない時の解除方法です。

 

 

 


【準備物】

ACCESS  =  パスワード不明のACCESS

調査用ACCESS  =  パスワード調査に使う新規ACCESS

Stirling  =  バイナリエディタフリーソフト

 

f:id:takalogpoint:20180423154947j:plain

 

 

■まずバイナリエディタを準備する

バイナリエディタ「Stirling」をダウンロードする

フリーソフトなので、Vectorなどからダウンローをしてください。

https://www.vector.co.jp/soft/dl/win95/util/se079072.html

ダウンロードしたファイルは圧縮(lzh)ですので、解凍してわかりやすいところに保管します。

解凍するとフォルダが出来ますので、その中のStirling.exeを使用します。

 

 

■パスワード不明となった「元ACCESS」をコピーし、バックアップを取っておく(重要です)

ACCESSファイルのバイナリデータを書き換えるので必ずバックアップを取っておくこと。

書き換えに失敗するとACCESS自体が壊れて開かなくなりますので非常に重要です。

 

 

■「調査用ACCESS」を新規作成する

「元ACCESS」のパスワードは仮に4ケタの数値(1111)としてあります。

「調査用ACCESS」を別途用意して、パスワードを設定し、バイナリデータの比較をしていきます。

 


バイナリエディタでパスワードのケタを比較調査する

Stirlingを使ってバイナリデータのパスワード部分のケタ数を調べていきます。

「元ACCESS」のパスワード部分のバイナリデータのケタ数と、「調査用ACCESS」のバイナリデータのケタ数が合致するものを探すのが目的です。

また、あらかじめ「元ACCESS」ファイルを最適化して保存しておいてください。

Stirlingを起動して、「元ACCESS」をドラッグ&ドロップして開きます。

f:id:takalogpoint:20180423155437j:plain

 

次にバイナリデータ内で文字列を検索します。
「双眼鏡のボタン」又は、Ctrl+Fで検索ウィンドウを開き、検索データ=DPB、データ種別=文字列、検索範囲=カーソル位置からとし、「次検索」ボタンをクリックします。
検索範囲のカーソル位置は、最上段行にカーソルを持って行ってください。

f:id:takalogpoint:20180423155649j:plain

 

DPBの後の""で挟まれている部分がパスワードのバイナリデータです。

DPB="ここがパスワードデータ"

少し見にくいですが、文字数を数えますと、78ケタありました。

f:id:takalogpoint:20180423155817j:plain

 

 

■「調査用ACCESS」でパスワードのケタ数を調べる

それでは次に「調査用ACCESS」のバイナリデータを使って、ケタ数を調べます

「調査用ACCESS」のパスワードを、「0」ゼロを1ケタから順に、同様に調べます。

また、ACCESSのパスワードを調べる前にACCESSの最適化を実行してから調べます。

 

なお、パスワードの設定方法は、下記となります。

VBAエディタの「ツール」-「(データベース名)のプロパティ」を選択

f:id:takalogpoint:20180423162944j:plain

 

開いたウィンドウ内の「保護」タブのチェックボックスにチェック、パスワードを入力となります。

f:id:takalogpoint:20180423163217j:plain

 

 

バイナリエディタで調べた結果としましては】
0=74ケタ
00=74ケタ
000=76ケタ
0000=74ケタ
00000=78ケタ ・・・ここで78ケタが一致しました

これはあくまでバイナリデータの桁数を一致させるもので、ACCESSパスワードのケタ数ではありません。

また、例えば同じ「0」が1ケタのパスワードでも、バイナリデータが上記のように必ず74ケタとは限らないみたいです。

同じバイナリデータ数が見つかるまで根気よくいろいろ調べるしかないようです。

 

 

バイナリエディタでパスワード部分をコピーする

パスワードのケタ数が一致したら、調査用ACCESSのバイナリデータを、「元ACCESS」のバイナリデータ部分にコピーし、保存します。

ここでコピー範囲など失敗すると、ACCESSが壊れ、復元できませんので、慎重にコピーしてください。

f:id:takalogpoint:20180423160343j:plain

 

 

■「元ACCESS」のパスワードを解除する

「元ACCESS」のVBAパスワードがこれで、「1111」から「00000」と変更されたので、パスワードを入力してVBAエディタを開きます。

(このまま「00000」で使用し続けてもかまいませんが)

パスワードの保護を解除(保護タブのチェックを外し、パスワードを削除)し保存ます。

これでパスワード保護が解除されました。

f:id:takalogpoint:20180423160807j:plain

 

 

■最後に

パスワード解除できたでしょうか。

実際にこのパスワードがかかったACCESSの修正を頼まれて困ったことがありました。

わざわざパスワードをかけて保護するような内容のACCESSでもないのに、と思いつつ、バイナリエディタで解除して事なきを得たことがあります。

ユーザーがたまたまVBAにたどり着き、いじってしまう事があるかもしれ無いので、保護は必要ですが、パスワードの引き継ぎも必要ですね。

個人的にはPC内のACCESSのみで処理するものなら、特にVBAのパスワードまでいらないかなと、思うのですが。

外部のデータサーバーにつなげて、複数のユーザーが同時にデータベースを扱うような配布ACCESSには保護は必要でしょうか。

誰かが勝手にVBAを修正して共有のデータベースの内容がおかしくなったら大事ですから。

別に私はシステム管理者ではないのですが、時々業務システムらしきものを作ったりするので、そんなことも考えたりもしているところです。

 

 

 


 

www.omake-zakki.com

www.omake-zakki.com

www.omake-zakki.com