- ベストアンサー
インポート禁止の方法とは?
- ACCESS2000で外部DBからのインポートを禁止する方法を教えてください。
- フォルダへのアクセス権限を与えられた人でも、インポートすると全てのデータを閲覧できてしまう現象に困っています。
- 良い方法をご存知の方はいらっしゃいますか?
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
こういうことでしょうか? 1.特定の人物は、フォームを介して限られたデータを参照できる。 2.その特定の人物であっても、すべてのデータのインポートを禁止する。 1.に関しては現状通りフォームにパスワードを設定して参照制限されるのでよろしいかと思います。 (ワークグループ管理してユーザー毎にテーブル参照権限を与えてもいいでしょう) 2.そうですね。DB_B.mdeからパスワード付きのDB_A.mdbを起動するのでいいでしょう。 その具体的ソースは、an_naさんが書かれたもので間違いないです。動くはずです。 DB_B.mdeの「モジュール(初期処理)」のソース (マクロのautoexecでプロシージャ(初期処理)の実行を定義しておく) モジュール「初期処理」の中身 ============================ Dim appAcc As Access.Application Dim db As DAO.Database Set appAcc = CreateObject("Access.Application") Set db = appAcc.DBEngine.OpenDatabase("D:\DB_A.mdb", False, False, "MS Access;pwd=himitsu") appAcc.OpenCurrentDatabase "D:\DB_A.mdb" db.Close Set db = Nothing appAcc.Visible = True DoCmd.Quit acQuitSaveNone ==================================
その他の回答 (6)
- skikichi
- ベストアンサー率65% (45/69)
うまくいってよかったです(^^ もちろん、起動のためのDB_B.mdbは実行形式のmdeにしてソースコードを見れないようにしておいてくださいね。 それから、DB_Bの起動時の設定で表示オプションを全部はずしておくと起動された瞬間に余計なものが見えなくて綺麗ですよ。 ワークグループ管理で権限をはずしてShell起動する方法もありますが、またの機会ということで。 それでは。
- skikichi
- ベストアンサー率65% (45/69)
まず、#4で質問した内容に回答していただかないと答えが出ません。 >skikichiさんの教えてくださったインポート禁止の方法で進めていきます★ と言われても#4で質問したように疑問点があるのでそれを具体的に実現する方法が変わってきます。 DB_BからDB_Aを起動しなくてもよいのではないでしょうか?
補足
>1.ユーザー管理(ワークグループ管理)はしていますか? →いいえ >system.mdw とか WRKGADM.EXEを使用されていますか? →いいえ >2.最初の質問にあった「・・・、そのデータベース中でもPassWord管理をして、該当データのみを閲覧することができるようにしていますが・・・」 >この意味は? →DB_A.mdbの初期フォームでこのDBにアクセスできる人(※1)に独自でパスワードを発行し、そのパスワードを入力してもらい、特定データを検索するようにしています。 >DB自体にパスワードはかけられているのですか? →質問時点ではパスワードはかけていませんでした。 >それともワークグループ管理されているのですか? →いいえ >3.「→DB_A.mdbのパスワードを知っていればインポート可」 >ということは、単純にDB_A.mdbにDB自体のパスワードをかければOKではないのでしょうか? >パスワードを知らない人はインポート不可になりますよ。 →(※1)の人はインポート禁止にしたい やはりDB_A.mdb自体ににパスワードを設定して、DB_B.mdbからパスワード付きのDB_A.mdbを起動させたいと思います。
- skikichi
- ベストアンサー率65% (45/69)
ちょっと言葉の定義と言いますか、概念に相違があるように感じますので、再度確認します。 1.ユーザー管理(ワークグループ管理)はしていますか? system.mdw とか WRKGADM.EXEを使用されていますか? 2.最初の質問にあった「・・・、そのデータベース中でもPassWord管理をして、該当データのみを閲覧することができるようにしていますが・・・」 この意味は? DB自体にパスワードはかけられているのですか? それともワークグループ管理されているのですか? 3.「→DB_A.mdbのパスワードを知っていればインポート可」 ということは、単純にDB_A.mdbにDB自体のパスワードをかければOKではないのでしょうか? パスワードを知らない人はインポート不可になりますよ。 どうも補足していただいている内容にいくつか矛盾点があるような気がするのですが!? 言っていることが分りますでしょうか?
お礼
skikichiさん、お世話になっています。 すみません、根本的に私の考え方が間違っていました。 skikichiさんの教えてくださったインポート禁止の方法で進めていきます★ こんなおバカな私に丁寧に説明してくださってありがとうございました。 あと一点、DB_B.mdbからDB_A.mdbを呼び出す方法を色々試してみましたが、上手くいきません。 Dim appAcc As Access.Application Dim db As DAO.Database Set appAcc = CreateObject("Access.Application") Set db = appAcc.DBEngine.OpenDatabase("C:\External.mdb" _ , False, False, "MS Access;pwd=password") appAcc.OpenCurrentDatabase "C:\External.mdb" db.Close: Set db = Nothing appAcc.Visible = True ' 表示させたい場合 上記を参考に動かしてみましたが、”DBEngineメソッドは失敗しました。_Applicationオブジェクト”というエラーメッセージが表示されてしまいます。 DB_B.mdbからDB_A.mdbを起動させるにはどのようにしたら良いでのしょうか?
- skikichi
- ベストアンサー率65% (45/69)
まず、DB_A.mdbとDB_B.mdeは全く別のDBです。 今までの機能はすべてDB_A.mdbに存在します。 DB_B.mdeはDB_A.mdbを起動するためだけに存在するDBです。 当然、DB_B.mdeにはテーブルは存在しません。 したがって、外部からテーブルを参照しようとする人はDB_A.mdbへアクセスしなければなりません。 しかし、今回の場合DB_A.mdbにはパスワードがかかっていますので、それを知り得る人だけしか参照もインポートもできないわけです。 確認事項: 1.ユーザー毎に参照できるテーブルを制限していますか? (ユーザー名毎にテーブルの参照権限を付与している) 2.ユーザー毎の制限を保持しつつ、誰からもインポート禁止にしたいですか? 3.ユーザー毎ではなく、DB自体のパスワードを知っている全ての人はフォームを介してすべてのデータを閲覧できてもよいですか? (もちろん、DB自体のパスワードを知っていてもインポートできないようにできます)
補足
skikichiさん、お世話になります。 理解力不足でしたが、ようやく把握できました。 >確認事項: >1.ユーザー毎に参照できるテーブルを制限していますか? > (ユーザー名毎にテーブルの参照権限を付与している) →いいえ >2.ユーザー毎の制限を保持しつつ、誰からもインポート禁止にしたいですか? →はい >3.ユーザー毎ではなく、DB自体のパスワードを知っている全ての人はフォームを介してすべてのデータを閲覧できてもよいですか? >(もちろん、DB自体のパスワードを知っていてもインポートできないようにできます) →DB_A.mdbのパスワードを知っていればインポート可 ちなみにパスワードつきの外部DBを開くにはどのようにしたら良いのでしょうか? 本当に度々すみませんがお教えください。
- skikichi
- ベストアンサー率65% (45/69)
データベースウィンドウを非表示にしたり、メニューバーを非表示にしたり、ファンクションキーを無効にしたりなどなど、テーブルを閲覧する方法は多数ありますので、それらをすべてプロテクトすることが可能です。 う~ん・・・ どういうことを言っているのでしょうか? DB_B.mdeのパスワードを知っている人でもDB_A.mdbのパスワードは知らないのですから、テーブルを直接見れる人はいないはずですが。 DB_B.mdeのソースは誰も見れませんので、DB_A.mdbのパスワードはあなたしか知り得ませんよ。
補足
skikichiさん 度々すみません。 先ほど教えていただいた通り、 >1.DB(DB_A.mdb)にパスワードをかけてください。 >2.DB_A.mdbを起動するDB(db_B.mde)を作成してください。 >3.DB_B.mdeにパスワードをかけて・・・ 上記処理を実行してみました。 そこで検証のため外部DBからdb_B.mdeのテーブルのインポートを試みたところ、db_B.mdeのパスワードを入力すると、DB_A.mdbのテーブルがインポートされてしまいました・・・。 ちなみに、db_B.mdeはDB_A.mdbからmdeファイルの作成で作成し、DB_A.mdbテーブルにリンクさせました。 う~ん、どうしてダメなのでしょう?? 本当に初心者なもので色々と質問してしまってすみません。
- skikichi
- ベストアンサー率65% (45/69)
「DBのパスワード管理」とは何をされているのでしょうか? ユーザー毎に権限を与えているのですか? それとも、DB自体にパスワードをかけているのですか? 完全にインポート禁止にするには・・・ 1.DB(DB_A.mdb)にパスワードをかけてください。 2.DB_A.mdbを起動するDB(db_B.mde)を作成してください。(mdeの実行形式にしてください。また、起動画面を非表示にし、起動終了後速やかにmdeを終了するようにプログラムしておくのがスマートですね) これで、DB_A.mdbからインポートできる人はあなただけです。 (今まで通り特定の人だけが起動できるようにしたいのであれば、DB_B.mdeにパスワードをかけて特定の人に公開してください) ユーザー管理で権限を与えパスワードを付与する形でも同様の手法が取れます。 DB_A.mdbを起動できる人は、テーブルを直接見ることができてしまいますが、これを完全にプロテクトする方法もあります。 ご希望できたら、それは別途ご説明します。
補足
skikichiさん、早速のご回答ありがとうございました。 >「DBのパスワード管理」とは何をされているのでしょうか? >ユーザー毎に権限を与えているのですか? >それとも、DB自体にパスワードをかけているのですか? 現在、DB自体にはパスワードはかけておらず、ログインしてきたユーザーによって表示データを選択し、表示しています。 >DB_A.mdbを起動できる人は、テーブルを直接見ることができてしまいますが、これを完全にプロテクトする方法もあります。 データベースウィンドウを非表示にする設定のことですか?こちらは苦労しながら何とか設定しました。 >(今まで通り特定の人だけが起動できるようにしたいのであれば、DB_B.mdeにパスワードをかけて特定の人に公開してください) DB_B.mdeにパスワードをかけると、そのDBに入ることができる人は結局全てのデータの閲覧権限を持ってしまうんですよねぇ・・・。 どうにかDB_B.mdeにログインしたときに閲覧できるデータ以外は公開しないという良いアイデアはありませんか? よろしくお願い致します。
お礼
>こういうことでしょうか? >1.特定の人物は、フォームを介して限られたデータを参照できる。 >2.その特定の人物であっても、すべてのデータのインポートを禁止する。 →そのとおりです。上手に説明できなくてごめんなさい。 再度実行してみたら正常に起動しました。 本当にお世話になりました★