Tips-01. Accessシステムの保護

苦労して作ったシステムをコピペされたら面白くないですよね。
少なくともデータは覗かれたり改ざんされないように管理しなくてはなりません。
Access で作ったシステムを保護する方法を考えてみました。

【1】AutoExec マクロでリボンを非表示にする

Access の起動時に実行するマクロ(AutoExec)を作成し、マクロ内でリボンを非表示にします。

(1)標準モジュールにFunction Codeを作成する。

Public Function TipsExec()
DoCmd.ShowToolbar "Ribbon", acToolbarNo 'リボン非表示
End Function

リボンを再表示するコマンドは DoCmd.ShowToolbar “Ribbon”, acToolbarYes です。

(2)AutoExec マクロを作成する。

主メニューの「マクロ」を開き、「プロシジャーの実行」を選択してFunction名「TipsExec」を登録します。マクロ名は、必ず「AutoExec」です。

Access file を起動すると、AutoExec マクロが実行されます。
リボン非表示にするコマンドが実行され、右のような何も表示されない画面になります。

※この画面はナビゲーションも非表示にしています。

この状態では何もできません。
一旦閉じてからShiftキーを押下したまま開くと、下記MENUを開くことができます。
システムの保護の投稿でこれを書いたらマズイですが、開発者のために。。。

 

【2】パスワードの入力を求めるフォームを作成する

<仕様>
➀ ログイン画面を作成して、テキストボックスとコマンドボタンを作成する。
➁ テキストボックスはパスワードの入力用で入力値は「*」に変換する。
➂ ログインボタンの押下でパスワードをチェックし、OKならメニューを開く。
➃ キャンセルボタンが押下された場合はAccessを閉じて終了する。
➄ 表示ボタンはパスワードの入力値の、表示、非表示を切り替える。

(1)ログイン画面の作成

テキストボックスの定型入力に「パスワード」を設定します。入力値は「*」に変換されます。

 

(2)イベントプロシジャーの作成

➀ パスワードテキストのフォーカス喪失時

ログインボタンにカーソルを移動します。(ログインボタンはフッター領域なので自動で移動しません)

Private Sub パスワード_Exit(Cancel As Integer)
Me.ログイン.SetFocus
End Sub

 

➁ キャンセルボタンのクリック時

ログイン画面を閉じてからAccess を終了します。

Private Sub キャンセル_Click()
DoCmd.Close 'ログイン画面を閉じる
Quit 'Accessを終了する
End Sub

➂ ログインボタンのクリック時

入力されたパスワードが設定しているパスワードと一致すれば、現在開いている「longin」画面を閉じてから、システムの開始画面を開きます。
この例では、ログインパスワードはVBA内に固定値でもっています。

Private Sub ログイン_Click()
If Me.パスワード = "******" Then '****** は固定値
DoCmd.Close 'ログイン画面を閉じる
DoCmd.OpenForm "システムメニュー", acNormal 'MENU画面を開く
Else
MsgBox ("パスワードが間違っています。")
End If
End Sub

➃ 表示ボタンの標題を切り替える

パスワードテキストへの入力内容を確認するため、標題の文字を表示、非表示を切り替えます。

Private Sub 表示_Click()
If Me.パスワード.InputMask = "password" Then
Me.パスワード.InputMask = ""
Me.表示.Caption = "非表示"
Else
Me.パスワード.InputMask = "password"
Me.表示.Caption = "表示"
End If
End Sub

(3)AutoExecマクロに「login」フォームを開くコマンドを追加する

Public Function TipsExec()
DoCmd.ShowToolbar “Ribbon”, acToolbarNo ‘リボン非表示
DoCmd.OpenForm “login” ‘login フォームを開く
End Function

起動時にリボンを非表示にして、ログインフォームを表示しています。

【3】VBAコードを保護する

VBAウィンドウで、ツールメニューからオブジェクトのパスワードを登録します。

システムのログインパスワードはVBA内の固定値で持っておくと、これでログインパスワードが漏れることはありません。絶対とは言えませんが、このプロジェクトパスワードを解析するのは結構大変ですので、とりあえずはロックしておくと安心です。

 

最後に主メニューの「ファイル」から「Accessオプション」を開きナビゲーションウインドウを非表示にします。Access file を起動すると「login」フォームのみが表示されます。

手動でAccessオプションを開くには、 ctrl キー +O(英文字オー)を押下します。

【5】隠しオブジェクトに設定する

ナビゲーションウィンドウからテーブル(データ)を非表示にしたい場合は、テーブルをクリックしてプロパティの「隠しオブジェクト」にチェックを入れます。薄く表示される場合は「隠しオブジェクトの表示」をOFFにします。

ナビゲーションウインドウの空白の領域を右クリックで開きます。

完璧にAccessシステムを保護するのは無理かもしれません。しかし、盗難防止には鍵が一つより二つの方が有効であるように、何らかの対策は講じられた方がいいと思います。
参考になれば幸いです。