MS Access Tips/Sample and VBA and Blog customize etc...

テーブルデータを保護する

Accessの場合、テーブルとフォーム、レポートなどのオブジェクトが一つのファイルに入っているで、管理が楽なんですが、反面、データ保護という点ではまったくダメですね。

ACCDE/MDE に変換すれば、フォームやレポート、モジュール等はデザインビューで開くことが出来なくなり、保護することができますが、テーブルやクエリはデザインビューで開けてしまいまったく保護することはできません。

そこで、今回は、テーブルデータを直接ユーザーに操作出来ないようにして、フォームやレポートを通じてのみデータ操作出来るようにする方法を紹介します。

保護設定済みのデータベース

難易度:

データベースを分割して、バックエンドにパスワードを設定する

データベースの分割で、バックエンドファイル(テーブルのみ)とフロントエンドファイル(フォーム、レポート等)に分割します。
(以下、ファイル名は、DBProtectBackEnd.ACCDB と DBProtectFrontEnd.ACCDB、ファイルを置く場所は、C:\ と仮定して説明します。)

バックエンドファイルは「パスワードを使用して暗号化」でパスワード保護します。(パスワードは 1234 と仮定します。)

バックエンドへの接続法をリンクテーブルから、レコードソースのSQLでの接続に変更する

フォームやレポートのレコードソースにテーブルが設定してある場合は、下記のように書きかえます。


テーブル名

変更後

クエリの場合は、SQLビューにして、FROM句に IN句を追加して外部接続するように変更します。

変更後

このSQL文をコピーして、SQLビューを閉じます。
レコードソース欄にコピーしたSQL文を貼り付けます。
別のプロパティ欄をクリックします。

変更後、フォームまたはレポートを保存して閉じます。
フォームまたはレポートを開いて正常に表示されるか確認します。

リンクテーブル、クエリをすべて削除します。

フロントエンドファイルを ACCDE にして配布する

フロントエンドファイルから ACCDE を作成します。

このDBProtectBackEnd.ACCDB、DBProtectFrontEnd.ACCDE をクライアントPCの C:\
に置きます。

これで、テーブル、クエリも保護できるようになります。

サーバーに置いて共有する場合は、IN句の接続先をサーバーのパスに変更すればOKです。

また、ファイルを置く場所が固定でない場合は、フォームやレポートを開くときにVBAで
接続先を設定したSQLを生成してレコードソースに設定することになります。

追記: フォーム、レポートにコードがなくても「コード保持」プロパティは「はい」に設定しておきます。SaveAsTextメソッドによってExportされるのを防ぐため。(コメントでMukkuMukuさんからアドバイスがありました。)

2015/09/14追記:複数値フィールド、添付型フィールドを含むテーブルは、SQLのIn句では接続できないので、フォームを開くときにリンクテーブルを生成して、閉じるときに削除するという方法で対処してください。

リンクテーブルの作成コード

拍手する

4 Comments

MukkuMuku says..."ちわっ"

こんばんは、MukkuMukuです。
実装が簡易なので時折使うのですが、もうひと手間追加しています。
コードがなくともForm/Reportの[コード保持/HasModule]プロパティをはい/True
にしています。

2012.04.05 22:06 | URL | #ROfyEFYk [edit]
hatena says..."re: ちわっ"

MukkuMuku さん、こんばんは。

> コードがなくともForm/Reportの[コード保持/HasModule]プロパティをはい/True
にしています。

ちょっと分からないのですけど、どんなメリットがあるのでしょうか?

2012.04.05 22:49 | URL | #5uE6dEgY [edit]
MukkuMuku says...""

桜咲く朝です。散歩してきました。さて、本題。
要旨としては、
 ・accdeであってもSaveAsTextメソッドによってExportが可能
 ・HasModule = True なオブジェクトはそれができない
それだけです。
出力できた場合、すべてのプロパティの内容を確認できます。
突き詰めていくと、
 「パスワードをプロパティに保存することを許容できるか」
になるのですが、目的の達成とその手段は、環境に合わせていろい
ろあってよいと考えています。

2012.04.07 09:23 | URL | #WCSj23LI [edit]
hatena says...""

>  ・accdeであってもSaveAsTextメソッドによってExportが可能
>  ・HasModule = True なオブジェクトはそれができない

へー、そうなんだ。
勉強になります。

本文では書かなかったけど、保護をより堅固にするには、フロントエンドの方も「パスワードをかけて暗号化」しておいた方がいいですね。でないとパスワードを覗こうと思えば覗けますので。

2012.04.07 23:40 | URL | #5uE6dEgY [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/351-faa68cce
まとめtyaiました【テーブルデータを保護する】
Accessの場合、テーブルとフォーム、レポートなどのオブジェクトが一つのファイルに入っているで、管理が楽なんですが、反面、データ保護という点ではまったくダメですね。 ACCDE/MDE に変換すれば、フォームやレポート、モジュール等はデザインビューで開くことが出来...
該当の記事は見つかりませんでした。