• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Accessのセキュリティ対策について)

Accessのセキュリティ対策について

このQ&Aのポイント
  • パスワード&暗号化でアクセス制限
  • 特定のPCでのみ使用可能に
  • ナビゲーションウィンドウを制限

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

ppp というパスワード付のファイルがあったとして、 リストボックスの設定は 値集合ソースに select * from テーブル名 IN '' [MS Access;PWD=ppp;DATABASE=e:\秘密.accdb;]; 値集合タイプに テーブル/クエリ コントロールソースは 空欄 では? >「隠しオブジェクト」にチェックを入れるのと同等の >ことになるんですかね 違います!お試しを。 Environ関数はAccess2000の頃には既にあったはずです。

naoto0216
質問者

お礼

いけました。 いろんなサイトを参考にしましたが、INの後の「''」を ダブルクォーテーションだと思ってました。 なんでこんなところに中途半端にダブルクォーテーションが 必要なんだろう??と思ってたのですが、 シングルクォーテーション2個だったんですね。。 失礼しました。 >Currentdb.tabledefs("隠したいテーブル名").attributes=1 >Application.refreshDatebasewindow については追々試してみたいと思います。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

パスワードが漏れて外部に持ち出されればなすすべはありません。 嫌がらせ程度のことはできますが順次突破されるでしょうね。 セキュリティに関する質問には回答しづらいです。 鍵のかけ方だけを教えるわけにはゆきません。 開け方も知らないと困るでしょう? ここのサイトは投稿した内容を投稿者自身が削除できません。 削除申請を出しても対応してくれるかは主のOKWAVEの判断次第。 この回答を見るのが善人ばかりとは限りません。 なので、ちょっとだけ。 テーブルを非表示にすればほんの少しだけマシかもしれません。 イミディエイトウィンドウで Currentdb.tabledefs("隠したいテーブル名").attributes=1 Application.refreshDatebasewindow の二行をそれぞれ実行してみてください。 ナビゲーションウィンドウから消えるはずです。 戻すには0。 この場合でもそのテーブルを元にしたクエリやフォームは従来通り機能します。 クエリのデザインビューやフォームのテーブル一覧リストにも表示されなくなります。 ただ表示されないだけなので直接指定すれば利用できます。 ファイルをバックエンドとフロントエンドに分離して バックエンドのデータベースをパスワード保護。 フロントエンドではリンクテーブルを作成して・・・はダメ。 そのテーブルを調べればパスワードや接続元がばっちり分ります。 リンクテーブル・クエリでは使わない。 フォームのVBAでゴチョゴチョやってファイルはaccde化する必要があります。 ※セキュリティの設定を行う場合に ちゃんとドキュメントを残し引き継ぎをしっかりやらないと 次の担当者が泣くことになります!※ PS. コンピュータ名はAPIを使用せずともenviron関数でも。 イミディエイトウィンドウで ?environ("computername") として試してみてください。 環境変数の名前はコマンドプロンプトで、Set で確認できます。 使えそうなのは、username くらい? Allowbypasskeyでの制限も VBAを使用せずとも突破できたりします。 Googleといろいろ・・・。 フォーム上に画像表示したい2 添付ファイル型の画像を添付ファイルコントロールを使用することなく 他の方法で表示できないか? については残念ながら力不足のため不明です。 以上ご参考まで。

naoto0216
質問者

お礼

リンクテーブルを作成せずに、別accdb(バックエンド)の テーブルへ接続することができました(SQLのIN句で指定)。 フォームを開くときに別accdbのテーブルを使って抽出した 内容をリストボックスに表示させました。 で、別accdbにパスをかけた場合、リストボックスはまっさら でエラーも表示されません。パスが効いている証拠だとは 思うのですが、パスワードが設定されている場合の指定が 分かりません。。 IN句で指定することになるのでしょうか。それともパスが設定 されている場合は、別の方法で行うのでしょうか。 ご教示頂けると幸いです。 宜しくお願い致します。

naoto0216
質問者

補足

NotFound404さま いつもご回答ありがとうございます。 >Currentdb.tabledefs("隠したいテーブル名").attributes=1 >Application.refreshDatebasewindow >の二行をそれぞれ実行してみてください。 については、ナビゲーションウィンドウのテーブルや フォームを選択し右クリックでプロパティを開いて 「隠しオブジェクト」にチェックを入れるのと同等の ことになるんですかね。 もし同じことなら、ナビゲーションオプションから「隠し オブジェクトの表示」にチェックを入れると表示される ようになります。 表示したままよりはマシって程度になるのでしょうか。 >フロントエンドではリンクテーブルを作成して・・・はダメ。 >そのテーブルを調べればパスワードや接続元がばっちり分ります。 こちらについては全く意識しておりませんでしたが、 今確認してみたところ、リンクテーブルマネージャーでフルパス が表示されてしまうんですね。。 ってことはプログラムに直接リンク先を書いたりってことを するんですかね。別途調べてみたいと思います。 >?environ("computername") として試してみてください computernameもusernameもうまく表示できました。 ・・・わたしが参考にしたサイトは何故1行で済むものを API?を使う方法で紹介しているのでしょうか。 参考したページが古く昔はenviron関数がなかったとかですかね。 >Allowbypasskeyでの制限も >VBAを使用せずとも突破できたりします。 気になるところですが、聞かなかったフリしときます(笑

すると、全ての回答が全文表示されます。
  • bardfish
  • ベストアンサー率28% (5029/17766)
回答No.1

Access単体ではまず無理ですね。 Windows NT系だとファイルもしくはフォルダ単位で暗号化できます。 http://www.atmarkit.co.jp/fwin2k/win2ktips/052usngefs/usngefs.html 情報は古いですが今でも通用する内容です。 ただし、どういうことが起きるかわからないので、いざというときに備えてバックアップは必要。 あまりガチガチなことをやってしまうと通常使用でものすごく不便になってしまうので、運用でカバーできることは運用手順で対応した方がいいケースも多々有ります。 ファイルサーバーを置くことができるのであれば、ドメインを構築してドメインユーザーの特定ユーザーしかアクセス権のないフォルダーを作ってそこに置くという方法もあります。 パソコン1台だけでなんでもやろうとしても限界があります。 さて、Access単体でどうにかするには・・・Accessってランタイム版があるますよね? 完成したaccdbを開いてマクロなどを実行するだけのバージョン。テーブルの編集(項目の追加とか削除)などができない、テーブルを開いてデータを見たり追加したりもできない。 開発とかは専用のパソコンで行い、通常業務はランタイム版しか使えないパソコンで使用するという方法もあります。で、データベースファイル本体はファイルサーバーにおいておく。 他には、AutoExecマクロで起動時に特定のパラメーターがなければ終了させるようなマクロを組むとか。 その場合、Shiftを押しながら開くと意味ないんですけどね。

naoto0216
質問者

補足

bardfishさま ご回答ありがとうございます。 また、説明不足で申し訳ございません。 ドメイン環境であり、ファイルサーバーで部門/ユーザー単位で 権限付けされた共有フォルダがあります。 おっしゃる通り、データとユーザーインターフェースは別に した方がよいのかもしれませんね。 教えて頂いた内容で検討してみたいと思います。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A