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

Accessのセキュリティについての質問

venzouの回答

  • venzou
  • ベストアンサー率71% (311/435)
回答No.5

出来るだけ簡単な方法を提案します。 大まかに方法を説明すると ・データとフォームを分離します。 ・データはデータベースパスワードを設定し守ります。 ・リンクテーブルを動的に作成します。 ・パスワードはVBAに記述し、MDEにする事で隠します。 ・Accessのアプリケーション自体を非表示にします。 データとフォームを分離する点では、No1さんの回答と同じですが、連結フォームから、非連結フォームへの変更は面倒なので、リンクテーブルを利用します。 リンクテーブルを普通に作ると、内容を見られてしまうので、必要な時にVBAで動的に作成します。処理が終われば、リンクテーブルを削除します。 具体的な手順を説明します。 まず、現状のMDBファイルを、管理者用と呼ぶ事にします。 管理者用のMDBファイルをコピーし、ユーザ用のMDBファイルを作ります。 管理者用のMDBファイルに、データベースパスワードを設定します。 ユーザ用のMDBファイルを開きます、以下はユーザ用のMDBでの作業です。 ユーザに不要なものは削除します。(レポートや、使わないフォームなど) テーブルは全て削除します。(テーブルは管理者用のテーブルにリンクさせます。後述) 使用する全てのフォームのプロパティで、「ポップアップ」と「作業ウインドウ固定」を「はい」にします。(アプリケーションを隠すので必要になります。) 新規のモジュールを追加し下記を記述(後で使うサブルーチンです) ファイル名とパスワードを正しい物に変更し、適当な名前で保存します。 (このパスワードはMDEにするので、覗かれる心配はありません。後述) ------------------------------------------------------------ '管理者用のMDBファイルの場所とパスワード Private Const MdbPath = "c:\temp\db1.mdb" Private Const PassWord = "hoge" Public Const SW_HIDE = 0 Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long 'Accessのアプリケーションを非表示にする処理 Public Sub HideApplication()  Dim tmp As Long  tmp = ShowWindow(Application.hWndAccessApp, SW_HIDE) End Sub 'リンクテーブルを作るサブルーチン Public Sub CreateLink(strName)  DoCmd.TransferDatabase acLink, "ODBC", ";DATABASE=" & MdbPath & ";PWD=" & PassWord & ";", acTable, strName, strName End Sub 'リンクテーブルを削除するサブルーチン Public Sub DeleteLink(strName)  DoCmd.DeleteObject acTable, strName End Sub ------------------------------------------------------------ メニュー用のフォームを追加します。(すでに有れば、それを利用します) 起動時の設定で、このフォームを表示します。 このフォームも「ポップアップ」と「作業ウインドウ固定」を「はい」にします。 開く時と、閉じる時のイベントプロシージャを下記にします。 ------------------------------------------------------------ Private Sub Form_Open(Cancel As Integer)  HideApplication End Sub Private Sub Form_Close()  DoCmd.Quit End Sub ------------------------------------------------------------ この設定で、ユーザ用のMDBを開くと、メニュー用のフォームだけが表示され、Accessのアプリケーションのウインドウは表示されません。また、メニューを閉じると、Accessも終了します。 次に、メニューから他のフォームを開く時に、必要なテーブルのリンクテーブルを作ってから開く様にします。 メニューのコマンドボタンのイベントプロシージャの例 ------------------------------------------------------------ Private Sub コマンド0_Click()  'フォームに必要なテーブルを記述する  CreateLink "Table1"  CreateLink "Table2"  DoCmd.OpenForm "フォーム1" End Sub ------------------------------------------------------------ 開いたフォームを閉じる時に、リンクテーブルを削除します。 これはメニューフォームではなく、それぞれのフォームの「閉じる時」のイベントプロシージャです。 ------------------------------------------------------------ Private Sub Form_Close()  'フォームで使ったリンクテーブルを削除する  DeleteLink "Table1"  DeleteLink "Table2" End Sub ------------------------------------------------------------ これで、SHIFT押しでデータベースを開いてもテーブルは存在しない状態になります。 最後の仕上げで、ユーザ用のMDBファイルからMDEファイルを作り、ユーザにはMDEファイルを使ってもらいます。ユーザ用のMDBファイルは保守のために残しますが、ユーザからは開けない場所に保存して下さい。 ============================================================ 上記の作業で、テーブルを隠す事が出来ると思います。 基本的には、上記の修正のみで、既存のフォームがそのまま使用できると思います。 テーブルが、ODBCのリンクテーブルになりますので、フォームの内容によっては、この点で修正が必要になるかもしれません。(単純な連結フォームなら問題ないと思います。)

Armadillo5
質問者

お礼

途中までなんとかできましたが、なぜか入力用から管理者が見つからないと出てしまいます。場所の指定が間違っているのでしょうか? 今現在は作成中なので、デスクトップのaccessというフォルダに、管理者システムという名前で入っています。 とりあえず入力用でポップアップだけ開けるとこまではなんとかできたんですが。管理者と繋がらなくて。。

関連するQ&A

  • ACCESSのセキュリティ

    旅行会社の個人情報をACCESSで管理しています。 アルバイト数名が個人情報を何万と入力しているのですが、バイトでも他の部署の人間でも簡単に今まで入力した個人情報を閲覧できてしまいます。シフト押しながらでないとテーブルを見れないようにはしていますが、気休めでしかありません。バイトを信用してないわけではないのですが、どうしてもサイクルが早いので危惧してしまいます。 テーブルのみにパスワードを入れるのは不可能だと言われましたが、何かいい手はありませんでしょうか。 ACCESS自体にパスワードを付けると、バイトが入力するときにパスワードがいるので本末転倒なのです。 ご教授お願い致します。

  • ACCESSテーブルにパスワード

    ACCESSのテーブルだけにパスワードをかけたいのですが、方法はあるでしょうか? 自分なりに調べた結果、テーブルのみはプログラムで作る方法しかないとのことでした。 データベースにパスワードを入れると、フォームで入力する不特定多数の人間にパスワードを教えないといけないので、本末転倒となってしまいます。 プログラム以外で方法はあるのか? プログラムでするにはどういうプログラムか? お手数ですがご教授お願い致します。

  • アクセスの構築、スマートなやり方教えてください。

    初心者でうまく説明できないかもしれませんが、 添付アクセスでNo1,2,3とテーブルをクエリでフォームを作りました。 1の社員番号を入力すると名前が呼び出され、 2の所属コードを入力すると部署。。。が呼び出されます、 3は資格コードをいれると資格名。。。が呼び出されるようにしました。 1にも所属コードを入力してあり1と2のリレーションを所属コードで結んでます、 これで困ったのが社員番号は変わらないのですが、所属コードは部署名が 変わったり変わったり人も部署の異動で変わります、 このままだと、部署の異動があった場合、入力してあるデータの修正が必要に なります、 次にやったのは1と2を一つのテーブルにしました、しかし、これも部署名が変わった時 社員数分変更をしなければなりません、本当なら変わった部署を修正し1と2をあとで 一緒にできるといいのですが、 1と2のテーブルをクエリで一緒にして3のテーブルと合わせてフォームを作ったところ 入力ができなくなりました、 添付の1と2を別なテーブルで出来て、部署名など変更になったり、部署の異動の時 過去のデータを修正せずにすむ構築教えてください。

  • access2000のサブフォーム同士の連携

    お願いします。教えてください。 テーブル(1)部署(2)社員(部署とリンク)(3)顧客(社員とリンク) で作っていて、メインフォームを部署でつくりそこにサブフォームで社員をデータシートで出しています。更に部署のフォームでサブフォームをつくり顧客をフォームで出したいのです。 社員をクリックすると、その社員が抱えている顧客が出てくるという形にしたいのですが、できるでしょうか? クリックして別のフォームを現在出しているのですが、部署のフォームのサブフォームとして出したいのですが。。。 お願いします。

  • ACCESS2003 セキュリティについて

    こんにちは。 ACCESS2003で、ワークグループを設定してセキュリティをかけました。 違うパソコンにACCESSが入っていないため、2007のランタイムをインストールしてデータベースを見られるようにしているのですが、セキュリティをかけてもパスワードを求められることもなく、データの書き換えができてしまいます。 どのようにすれば、ランタイムで起動したデータベースのアクセスを制限できるのでしょうか?

  • Accessで、ある行を並び替えた後に採番したい。

    初心者です。よろしくお願いいたします。 ACCESSで顧客データがあります。 部署、名前、住所・・・・といったテーブルを元 にして作成した入力フォームがあります。 ところが、最近になってデータごとにIDを振る ことになりました。しかも「まずは部署でソートを かけてから採番する」ということになりました。 通常でしたら、テーブルにオートナンバー型のフィールドを作成すればいいと思うのですが、その前に「部署」フィールドでソートをかけないといけないのです。 (1) データを追加する (2) 部署でソートをかける (3) (2)の状態で採番 ・・・・という流れにしたいのです。なので データを追加するたびに必ず最後に最新の状態 で採番し直す!と言った感じです。 上記のような方法はありますでしょうか。 よろしくお願いたします。

  • 助けてaccess!

    アクセスで顧客データを作っています。 クエリ上のデータとテーブルのデータ(サブフォームで)を引っ張り、「入力フォーム」を作成したのですが、新規情報を入れようとすると、「フィールドを更新できません」とエラーが出ます。しかしEnter Keyを3回たたく(このエラーが3回でる)となぜか入力ができるようになります。そしてその後保存もできます。 この現象はなぜ出るのでしょうか?そして解決方法をどなたか教えてください。よろしくお願いします。

  • ACCESS2000でセキュリティーをかけたいのです。

    ACCESS2000を利用しています。セキュリティーをかけたいのですが、ツール→セキュリティーウィザードを利用してチャレンジしてみたのですが、基本がわからないせいか、うまくいきません。 データにアクセスする時に「名前」と「パスワード」だけはできたのですが、基本的なことが不明な為、サブフォームが見えなくなったり、フルアクセスにすると全部変更や削除ができて、セキュリティーの意味がなくなったりと四苦八苦しています。 ・フォーム毎に利用できるもの許可したりするのは可能でしょうか? (フォームの中でも、サブフォーム1・2共に見ることは可能で、サブフォーム1は変更可。サブフォーム2は変更不可といったこともできますでしょうか?) どなたか、ご教授お願いいたします。 最終的には、このセキュリティーを利用してデータベースに入り、ユーザー名を(表示)して、更新を行うと、そのユーザー名を取得して、テーブルに保存したいのですが、可能でしょうか? よろしくお願いいたします。

  • Access にパスワードをかけたい

    Access にパスワードをかけたい Access で、データ分割ツールを使い、”テーブルデータ”と”フォーム”にファイルを分けました。 その場合のパスワードのかけ方がわかりません。 やりたい事は、テーブルのファイルをパスワードを知っている人しか見れないようにしたいです。 ます、テーブルのファイルに、排他的モードで開き、”セキュリティ”の項目をたどってパスワードをかけました。 そして、フォームのファイルを開こうとすると、”パスワードが違います”と表示されます。 そこで、フォームファイルを、テーブルファイルの手順で、パスワードをかけました。 もちろん、テーブルファイルと同じパスワードです。 その後に、フォームを開いて見ました。 それでも、”パスワードが違います”と表示されます。 質問は、ファイルを分割した場合、どのようにパスワードをかければいいのでしょうか? よろしくお願いします。

  • Access2003でのフォーム作成について(再度です)

    民宿の顧客管理をAccessでしようかと思っています。 氏名、住所、来客日などのフィールドを持つ顧客テーブル。 来客日、その日の献立1~17までを持つ日別献立テーブル。 この2つのテーブルからクエリーを作成し、 それを基にフォームを作ってデータを両方のテーブルに振り分けしようとしたんですが、うまくいきません。 クエリーで来客日同士を結ぶとデータは表示されますが新規の入力が出来ません。 顧客テーブルの顧客ID(オートナンバー)と 日別献立テーブルに顧客ID(数値型)を挿入し、2つを結んでも一方のデータしか表示されません。 おかしいとは思いますが、何がおかしいかわかりません。 何か良い方法があればお教え下さい。