ACCESS2000で外部DBからのインポートを禁止するにはどのような設定をしたらいいでしょうか?以前、こちらのページでも同様の質問があったようで、拝見させていただきましたが、いまいちよく分かりませんでした・・・。

現在、権限を与えられた人のみが入れるフォルダの中にデータベースを作成し、そのデータベース中でもPassWord管理をして、該当データのみを閲覧することができるようにしていますが、そのフォルダに入ることができる人はインポートをすると全てのデータを閲覧することができてしまいます・・・。

どなたか良い方法をご存知の方教えていただけませんか?
よろしくお願い致しますm(_ _)m

このQ&Aに関連する最新のQ&A

A 回答 (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
==================================
    • good
    • 0
この回答へのお礼

>こういうことでしょうか?
>1.特定の人物は、フォームを介して限られたデータを参照できる。
>2.その特定の人物であっても、すべてのデータのインポートを禁止する。
→そのとおりです。上手に説明できなくてごめんなさい。

再度実行してみたら正常に起動しました。
本当にお世話になりました★

お礼日時:2005/04/22 18:08

うまくいってよかったです(^^


もちろん、起動のためのDB_B.mdbは実行形式のmdeにしてソースコードを見れないようにしておいてくださいね。
それから、DB_Bの起動時の設定で表示オプションを全部はずしておくと起動された瞬間に余計なものが見えなくて綺麗ですよ。

ワークグループ管理で権限をはずしてShell起動する方法もありますが、またの機会ということで。

それでは。
    • good
    • 0

まず、#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を起動させたいと思います。

補足日時:2005/04/22 12:02
    • good
    • 0

ちょっと言葉の定義と言いますか、概念に相違があるように感じますので、再度確認します。



1.ユーザー管理(ワークグループ管理)はしていますか?
system.mdw とか WRKGADM.EXEを使用されていますか?

2.最初の質問にあった「・・・、そのデータベース中でもPassWord管理をして、該当データのみを閲覧することができるようにしていますが・・・」

この意味は?
DB自体にパスワードはかけられているのですか?
それともワークグループ管理されているのですか?

3.「→DB_A.mdbのパスワードを知っていればインポート可」

ということは、単純にDB_A.mdbにDB自体のパスワードをかければOKではないのでしょうか?
パスワードを知らない人はインポート不可になりますよ。

どうも補足していただいている内容にいくつか矛盾点があるような気がするのですが!?
言っていることが分りますでしょうか?
    • good
    • 0
この回答へのお礼

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を起動させるにはどのようにしたら良いでのしょうか?

お礼日時:2005/04/21 08:58

まず、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を開くにはどのようにしたら良いのでしょうか?
本当に度々すみませんがお教えください。

補足日時:2005/04/19 17:57
    • good
    • 0

データベースウィンドウを非表示にしたり、メニューバーを非表示にしたり、ファンクションキーを無効にしたりなどなど、テーブルを閲覧する方法は多数ありますので、それらをすべてプロテクトすることが可能です。



う~ん・・・
どういうことを言っているのでしょうか?

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テーブルにリンクさせました。
う~ん、どうしてダメなのでしょう??

本当に初心者なもので色々と質問してしまってすみません。

補足日時:2005/04/19 13:38
    • good
    • 0

「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にログインしたときに閲覧できるデータ以外は公開しないという良いアイデアはありませんか?

よろしくお願い致します。

補足日時:2005/04/19 11:43
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング