質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

5789閲覧

ACCESS 利用者にリンクテーブルを見られたくない VBA

access

総合スコア9

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/07/15 14:21

以前もご質問させて頂いたのですが、Accessでヒヤリハット入力ツールを作成しておりまして、セキュリティ面でアドバイスを頂きたく存じます。

[前提]
この入力ツールは、バックエンドファイルと、フロントエンドファイルに分割し、フロントエンドファイル(accdb)を利用者に配布する予定です。
利用者はフロントエンドファイルをローカルへコピーし開くという手順です。
(フロントエンドファイルのテーブルはリンクテーブルでバックエンドのテーブルと繋がっている)

[やりたいこと]
利用者にフロントエンドファイルのリンクテーブルを見られたくない。

[試したこと]
フロントエンドファイルには下記の設定をしました。
①ショートカットを無効化
②ナビゲーションウィンドウ非表示
③テーブルを隠しオブジェクトに設定
④Access本体の×ボタンを無効化(マクロのAutoExecにて設定)
⑤リボンを非表示(マクロのAutoExecにて設定)
⑥VBAにパスワードをかける
⑦shiftで開くことを無効化(マクロでプロパティをいじる方法で)

⑦を最後に実行してファイルを閉じることで、作成した私でさえもフロントエンドファイルの中身をみることができなくなりました。これでセキュリティは完璧だと思い込み、本番環境で一部利用者に使用感を伺いたく配布を始めると、マクロのセキュリティ警告が表示されてAutoExecが失敗してしまい、リボンが表示されてしまいました。
リボンが表示されてしまうと、そこからファイル - プライバシーオプション から ナビゲーションウィンドウを表示する という設定に変更され、再びファイルを開かれるとリンクテーブルがみえてしまいます。

そこまで気づく人も少ないとは思いますが、そもそもAutoExecが失敗するウィンドウを利用者に見せてしまうことがダメだと思います。

何とか利用者にリンクテーブルをみせない方法はないでしょうか。

最終手段としては、リンクテーブルは廃止してSQL実行毎にバックエンドのテーブルに繋ぐ
という方法で検討しております。
https://hatenachips.blog.fc2.com/blog-entry-351.html

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

全てワークテーブルで処理するのは如何でしょうか。
フロント側Accessへ空のワークテーブルを準備します。
1.処理開始時にVBAからSQLを使って必要データのみワークテーブルへセット。
2.画面Form起動(又は画面更新)
3.参照・入力運用処理実行。
4.更新ボタンをクリックで、データ側Accessへデータ反映させる。
5.完了後ワークテーブルデータ削除。
1~5を処理単位毎に繰り返し、Access起動終了時にも念の為データ削除する。
修正作業は多いかも知れませんが、偶発的な不具合発生時にもテーブルを絶対見せたく無いという事であればリンクは厳しいかと思います。
起動時にリンクテーブルを作成、終了時に削除してもその間に見られないと言う保証は難しいのではないでしょうか
(尚、現在も同じと思いますがフロントAccessはユーザー毎に個別ファイルとなります。)

投稿2020/07/16 00:30

編集2020/07/17 01:15
tosi

総合スコア553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

access

2020/07/20 10:29

ありがとうございます。 色々検討したのですが、リンクテーブルは廃止してDAOレコードセットでやることにしました。
guest

0

ベストアンサー

これでセキュリティは完璧だと思い込み、本番環境で一部利用者に使用感を伺いたく配布を始めると、マクロのセキュリティ警告が表示されてAutoExecが失敗してしまい、リボンが表示されてしまいました。

下記を参照して、セキュリティ警告がでないように設定しましょう。

データベースを信頼するかどうか決定する - Access


⑦shiftで開くことを無効化(マクロでプロパティをいじる方法で)

これは実は外部から解除する方法はあります。
VBAが使える人なら解除できてしまいます。
そこまでできる人は社内にはいないという前提ならいいのですが。

最終手段としては、リンクテーブルは廃止してSQL実行毎にバックエンドのテーブルに繋ぐ

という方法で検討しております。

下記で私が提案した方法ですね。

VBA - 起動時にリンクテーブルを作成する|teratail

DLookup、DCount が使えないとという点を懸念されてましたが、外部データベースでも使える代替関数を上記の回答に追記しておきましたので、参照ください。

投稿2020/07/15 16:03

編集2020/07/16 01:22
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

access

2020/07/17 08:14

お返事遅くなりました。 ご回答、コードまで有難うございます。助かりました。 イベント毎にDBへ接続しにいくのが普通なのでしょうか。 フロントファイルを開いたときに、 Dim db as DAO.Database Set db = CurrentDB() で接続しておいて、一連の処理が終了してからDBを切る方法だと何かマズイのでしょうか。 どこのサンプルコードをみてもイベント毎にdb接続を行っているように見えまして。
hatena19

2020/07/17 11:49

CurrentDB は自分自身のデータベースということですので、データベースファイルを開いたときにすでに開いている(接続している)。 CurrentDB() で既に開いているデータベースを参照しているということですので、グロパール変数に格納して参照しても、CurrentDB() で参照しても大差ないと思います。 追記の関数では CurrentDB から IN句で外部データベースに接続する方法を使用しましたが、グローバル変数を使うなら、OpenDatebase で外部データベースを開いて(接続して)、変数に格納して、それを使う方法にすればいいでしょう。これならIN句を使う必要はありません。 Workspace.OpenDatabase メソッド (DAO) | Microsoft Docs https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/workspace-opendatabase-method-dao White Tiger - DAOを使用してパスワードで保護されたデータベースを開く方法 http://www7b.biglobe.ne.jp/~whitetiger/ac/ac2002012.html
access

2020/07/17 14:19

すみません、色々勘違いしておりました。 今までCurrendDBでしかDAOレコードセットを扱ったことがなく Dim db as DAO.Database Dim rs as DAO.Recordset Set db = CurrentDB() Set rs = db.open(テーブル名) で丸暗記しておりました。 外部のDBのテーブルへ接続するには、 ①WorkSpaceオブジェクトをつくる ②外部DB接続 ③外部DBのRSオブジェクトをつくる という手順なのですね。 勉強になりました。早速明日から試してみます。 有難うございます。
access

2020/07/20 10:30

レコードセットで作り変えました。 またちょっと難しい面がでてきたので別途質問させて頂きたく存じます。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問