hatena chips

MS Access Tips/Sample and Blog customize and Momoiro Clover Z etc...

«Newer PC新調、SSD導入で爆速 | 更新クエリで定義域集計関数を使わずに集計する Older»

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

Category: Access-DataBase

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

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

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

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

難易度: 難易度: 2

データベースの分割で、バックエンドファイル(テーブルのみ)とフロントエンドファイル(フォーム、レポート等)に分割します。
(以下、ファイル名は、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 リンクテーブル

  1. EDIT
  2. 2012/04/05(木) 16:45:00
  3. | トラックバック:1
  4. | コメント:4
  5. | ▲PageTop▲
«Newer PC新調、SSD導入で爆速 | 更新クエリで定義域集計関数を使わずに集計する Older»

コメント

[638] ちわっ

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

  1. 2012/04/05(木) 22:06:15 |
  2. URL |
  3. MukkuMuku
  4. [ 編集 ]

[639] re: ちわっ

MukkuMuku さん、こんばんは。

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

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

  1. 2012/04/05(木) 22:49:47 |
  2. URL |
  3. hatena
  4. [ 編集 ]

[640]

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

  1. 2012/04/07(土) 09:23:05 |
  2. URL |
  3. MukkuMuku
  4. [ 編集 ]

[641]

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

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

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

  1. 2012/04/07(土) 23:40:08 |
  2. URL |
  3. hatena
  4. [ 編集 ]

コメントの投稿


トラックバック

トラックバック URL
この記事にトラックバックする(FC2ブログユーザー)

まとめtyaiました【テーブルデータを保護する】

Accessの場合、テーブルとフォーム、レポートなどのオブジェクトが一つのファイルに入っているで、管理が楽なんですが、反面、データ保護という点ではまったくダメですね。 ACCDE/MDE に変換すれば、フォームやレポート、モジュール等はデザインビューで開くことが出来...
  1. 2012/05/13(日) 10:34:30 |
  2. まとめwoネタ速neo