Accessの場合、テーブルとフォーム、レポートなどのオブジェクトが一つのファイルに入っているで、管理が楽なんですが、反面、データ保護という点ではまったくダメですね。
ACCDE/MDE に変換すれば、フォームやレポート、モジュール等はデザインビューで開くことが出来なくなり、保護することができますが、テーブルやクエリはデザインビューで開けてしまいまったく保護することはできません。
そこで、今回は、テーブルデータを直接ユーザーに操作出来ないようにして、フォームやレポートを通じてのみデータ操作出来るようにする方法を紹介します。
難易度:
データベースの分割で、バックエンドファイル(テーブルのみ)とフロントエンドファイル(フォーム、レポート等)に分割します。
(以下、ファイル名は、DBProtectBackEnd.ACCDB と DBProtectFrontEnd.ACCDB、ファイルを置く場所は、C:\ と仮定して説明します。)
バックエンドファイルは「パスワードを使用して暗号化」でパスワード保護します。(パスワードは 1234 と仮定します。)
フォームやレポートのレコードソースにテーブルが設定してある場合は、下記のように書きかえます。
元
テーブル名
変更後
クエリの場合は、SQLビューにして、FROM句に IN句を追加して外部接続するように変更します。
元
変更後
このSQL文をコピーして、SQLビューを閉じます。
レコードソース欄にコピーしたSQL文を貼り付けます。
別のプロパティ欄をクリックします。
変更後、フォームまたはレポートを保存して閉じます。
フォームまたはレポートを開いて正常に表示されるか確認します。
リンクテーブル、クエリをすべて削除します。
フロントエンドファイルから ACCDE を作成します。
このDBProtectBackEnd.ACCDB、DBProtectFrontEnd.ACCDE をクライアントPCの C:\
に置きます。
これで、テーブル、クエリも保護できるようになります。
サーバーに置いて共有する場合は、IN句の接続先をサーバーのパスに変更すればOKです。
また、ファイルを置く場所が固定でない場合は、フォームやレポートを開くときにVBAで
接続先を設定したSQLを生成してレコードソースに設定することになります。
追記: フォーム、レポートにコードがなくても「コード保持」プロパティは「はい」に設定しておきます。SaveAsTextメソッドによってExportされるのを防ぐため。(コメントでMukkuMukuさんからアドバイスがありました。)
ツイート
テーマ:MS-Access関係 | ジャンル:コンピュータ | タグ: Access DataBase リンクテーブル
こんばんは、MukkuMukuです。
実装が簡易なので時折使うのですが、もうひと手間追加しています。
コードがなくともForm/Reportの[コード保持/HasModule]プロパティをはい/True
にしています。
MukkuMuku さん、こんばんは。
> コードがなくともForm/Reportの[コード保持/HasModule]プロパティをはい/True
にしています。
ちょっと分からないのですけど、どんなメリットがあるのでしょうか?
桜咲く朝です。散歩してきました。さて、本題。
要旨としては、
・accdeであってもSaveAsTextメソッドによってExportが可能
・HasModule = True なオブジェクトはそれができない
それだけです。
出力できた場合、すべてのプロパティの内容を確認できます。
突き詰めていくと、
「パスワードをプロパティに保存することを許容できるか」
になるのですが、目的の達成とその手段は、環境に合わせていろい
ろあってよいと考えています。
> ・accdeであってもSaveAsTextメソッドによってExportが可能
> ・HasModule = True なオブジェクトはそれができない
へー、そうなんだ。
勉強になります。
本文では書かなかったけど、保護をより堅固にするには、フロントエンドの方も「パスワードをかけて暗号化」しておいた方がいいですね。でないとパスワードを覗こうと思えば覗けますので。
Author:hatena
MS ACCESS系の掲示板を徘徊している hatena です。ももいろクローバーZにはまり中。
■徘徊してます。