- 締切済み
accessでのネットワーク管理と、非表示について
access2002でOSは2000という環境です。ネットワークセキュリティでワークグループ管理をしています。 共有をかけて、mdwファイルにワークグループ参加させているのですが、このデータベースを使わないACCESSユーザーがアクセスするとワークグループに参加していないので何でも出来てしまいます。 しかしワークグループに参加させてしまうと、新たに空のデータベースからデータベースを作成する際にもユーザーログインする必要が出来てしまうのです が、ワークグループに参加していない人はデータベースにアクセスできないようには出来ないでしょうか? それともう一つですが、ログインユーザー(ユーザー権限)によって起動した際の最初のメニュー欄に見えてるコマンドボタンを変更したいのですが、(特定のユーザーに使ってもらいたくないコマンドボタンがあります。)ユーザー権限によってコントロールの可視、不可視を設定できる方法を教えてください。 よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- skikichi
- ベストアンサー率65% (45/69)
まず、mdwが使用中ということは誰かがそのワークグループで使用しているということですので自分のPCを含めて全員がどのワークグループを使用すべきなのかをキチッと整理する必要がありますね。 mdeはVBAのソースは見れませんが、マクロやクエリーは見れるし変更もできてしまいます。 VBAは使用されていないのですよね!? ワークグループ管理は手間がかかりますので、データベースウィンドウの非表示でクエリーを見れなくする等の対策ではダメですか? まぁクエリーを見ようと思えばメニューバーから見る方法等ありますが。 メニューバーを消すこともできますよ。 要はどこまでセキュリティーを強くするかです。 お望みであればガチガチに鉄壁のセキュリティーをかける方法もあります。 DBの分割はお勧めします。 サーバー管理に関しては、話が膨大になりますので説明省略しますが、技術者で無い方でしたら外部に発注すべきですが、最低でも何百万の費用が必要になってくるでしょう。 メンテナンス契約もすることになり毎月の管理料も。 その費用が出せないのであれば、現状の管理でも大丈夫かと思います。 ただし、データのバックアップは必ず行ってください。 違う媒体(MD、CD,DVD)へ毎日バックアップしてください。 これによって、たとえDBが壊れても当日分のデータだけが失われ、前日までのデータはバックアップをリストアすれば復元できます。 当日分は仕方ありませんので、当日様々なオペレーションをした方々に再度入力してもらうことになります。 最も簡単なバックアップ方法は、共有された他の人のPCのHDへコピペすればよいです。 バックアップツール(フリーウェアー、シェアーウェアー)はインターネット上に検索すれば何百とあります。 DBの検索に関してですが、いくつか疑問点があります。 もしかして・・・テーブルの項目に何らかの「年月日」を持って無いのでは? つまり日付を管理していないのでは? テーブル設計は汎用的に。 「どのような参照にも応えられる」ように構築すべきです。 基本的にクエリーの変更は例外を除きしない。 クエリーも汎用的に作成する。 まず、毎月のデータを何故同じテーブルに追加しないのですか? テーブル設計の最適化と言いますが、 たとえば、月毎にデータを参照されているとのことでしたら日付のデータを持たせます。 ですから、新規のデータをもらったときに日付を付けて同じテーブルに追加してあげれば、参照するときも「今月分だけ」を参照というクエリーが作れるわけです。 毎月、データの項目は変更されるのですか? 普通は、たとえば「氏名、年齢、給料振込み日」なんてテーブルを作成します。 御社であれば「販売管理データ1、販売管理データ2、販売年月日」 「販売年月日」という項目が入っていればデータは重複しませんので同じテーブルに追加できるはずです。 そして参照するときに日付が今月であるものを引っ張ってくればよいのです。 たとえ都合があって一旦新規テーブルにインポートしたとしても、その時点ですぐに既存のテーブルに日付を付けて追加するようにプログラムしておくべきです。 別の画像やファイルは別のPCに分散して管理されてはいかがでしょうか? サーバーもどきのPCとして一台購入されてはいかがでしょうか? 外部発注してサーバー管理するのとは桁違いに安く済みますよ。 1.バックアップは定期的に行う。 2.クエリーを見れなくするセキュリティーをかける。 3.DBを分割する これだけでもだいぶしっかりした管理が可能だと思います。
- skikichi
- ベストアンサー率65% (45/69)
う~ん、確かに混乱されているような文面ですね。 mdbはソースを含みますので自分だけが分かるところで非公開にします。 それを変換したmdeを公開し全員で共用します。 DBを分割したとしても(フロント/バック共に)同様です。 superuserの権限の再設定は・・・ 一旦、「管理者」に全権を与えてください。 そして、管理者としてログインしsuperuserに必要な権限を与えます。 そして、管理者の権限を再度剥奪します。 (このあたりは、私が前に想定したユーザー管理の場合ですが、tinycocoさんが結局どのような管理をされたのかよく分からないため何とも具体的にはかけませんが) 毎月のデータのインポートに関してですが・・・ 具体的なデータ更新の内容が分からないので一般的に言います。 まず、何もソースをいじらなくても毎月データのインポートをする方法はVBAを組み然るべきプログラムで実現できるように感じられますが、それは置いておいて現状手っ取り早い別の方法を説明します。 方法1: 非公開のmdbで必要な修正を加えデータインポートを行い、更新されたテーブルを公開されているmdeの同テーブルにエクスポートし上書きします。 方法2: DBを分割してください。 test.mdb(非公開) test.mde(共有) test_be.mdb(共有) test_be.mdbに存在するテーブルへはtest.mdbとtest.mdeの両方からリンクします。 テーブルは全員が共用していると同時に開発用の非公開DB(test.mdb)でも共用しています。 したがって、ソースやクエリーを都度変更してインポートした場合リアルタイムに全員が参照しているテーブルが更新されます。 基本的に各自のPCにDBを置くことはしません。 tinycocoさんのPCにあるDBを共有されているとのことですから各自はtinycocoさんのPCにあるDBを起動しているのですよね!?
- skikichi
- ベストアンサー率65% (45/69)
おっしゃる目的(不可抗力)でソースをいじれなくするためにも、mdeファイルに変換しましょう! ワークグループでの管理は複雑(煩雑)かつ管理が面倒でログインも必要になり、変更なども大変です。 いまひとつ、どういう目的でログインさせているのか分かりかねますが、もし、それだけの目的(他者によるプログラム変更防止)でしたら、mdeに変換して使用することをお勧めします。 「ツールー>データベースユーティリティーー>MDEファイルの作成」 で簡単に実行形式のファイル(mde)が作れますよ。 つまり、mdbはすべての情報が入っていますが、mdeファイルはDBが動くのに最低限必要なコードしか入っていません。開発に必要なソースコード(プログラム)等が排除されコンパイル後のオブジェクトコードしか無いのです。 ソースコードが無いのですから、当然誰もプログラムをいじることができないのです。 開発者(tinycocoさん)がプログラムを変更したい時には、mdbファイルの方をいじって再度mdeへの変換を行えばよいのです。 もちろん、mdeは公開しますが、mdbはtinycocoさんのPCにローカルに保持していれば誰もいじれません。 それから、DBの分割で速度は明らかに遅くなります。 データのやり取りの度にDB間やネットワークを通過しますからね。 分割しないのが一番速度は速いです。 それから端末によって速度が違うとのことですが、これは社内のネットワーク構成に起因するかと思われますので一概に判断できません。 それと、分割したDBがそれぞれどのサーバーに存在するのか?とか調べられた方がよろしいかと思います。
補足
あ、おととい補足を送ったのにアップされていませんね。 ー_-;; mdeファイルについて調べましたが、プログラムなどを含まないファイルに変換できるようですね。これがmdbよりも良さそうです。そしてこのmdeに変換して、各クライアント(?)に配れば、今のようにmdbの共有をしているよりずっと早く動かすことが出来そうです。ネットワークセキュリティの設定も必要ないし。というかmdbもフロントエンドデータベースならば各クライアントに配ってもいいものなんでしょうか? そこで一つ困ったことがあります。私のデータベースは文字が灰色になっていてmdeファイルに変換が出来ません。 mdeファイルに変換できる条件として、私が管理者権限を全て保有していて、全てのオブジェクトの所有者である必要があると書いてありました。しかし、私はもちろん全てのオブジェクトの所有者で管理者権限も全て与えています。 そこで気づいたのですが、データベースの「構造の読み取り」とテーブルなどの「開く/実行」のトグルが灰色になっていて選択できません。やはり、私のワークグループの設定が悪いようです。 もしmdeファイルに変換できたとして、まだ問題があります。このソフトの中で毎月テーブルを新しいものに更新しなければいけないものがあります。 例えば、「今月の販売実績を検索契約書と同条件で検索」 というコマンドボタンがあります。 ですから、私は毎月販売実績をエクセルシートからインポートしてクエリを作成してマクロも書き直しています。 これを毎月全ての人のパソコンに設置し直すのはかなり手間のような気がします。 補足ですが、私が個人的に作成したものですので、もちろん会社にはサーバーなんてものはありません。ですから、フロントもバックもセキュリティのファイルも私のパソコンの中に入っています。現在それをみんなで共有している状態です。 なんだかだんだんどうすればいいのか分からなくなってきました。せっかく、教えて頂いているのに、自分の説明が下手過ぎて、やきもきします。 面倒くさくなったら、教えてください。済みにしますので。ごめんなさい。
- skikichi
- ベストアンサー率65% (45/69)
あ~まだ質問が残っていましたね。 不特定多数の人がいじり壊れるが恐い。。。 解決策: ソースコードをいじれなくする(見えなくする)には実行用ファイル(mde)を作成すればOKです。 テーブル等をフォームなどを介すのではなく、直接見れないようにするには、DB起動時にさまざまな制限を動的にかけることになりますが、これを説明すると長くなるのでまた改めて。。。
お礼
ありがとうございます。 まずmdbとmdeというファイル形式の違いがわかりませんが、skikichiさんから教えてもらったことを理解出来るようにもう一度ネットで調べてみます。 ユーザーによってメニューの可視、不可視は明日さっそくチャレンジしてみたいと思います。 他の人がいじれないといっても、そこまで分かる人がいないので意図的にプログラムをいじるということではなく、まったくアクセスというソフトがどういうものか理解していない人が偶然にプログラムをいじってしまう恐れがないようになれば充分です。 それでsystemというグループを捨ててみたら、今日会社で違う人のパソコンから入ったら、プログラムを使う権限がないというエラーが出たので、これでひと安心といったところです。 なぜ使える人がいないのに心配したかといいますと別の課の人が今アクセスで顧客管理データベースを作ろう、または導入しようとしていて、その拍子にいじくられたらいやだなぁと思ったからです。 本当は私みたいな素人がシステムを作るという事自体が無謀なのですが、バッチファイルというのも分かりませんし、システム化がほとんどされていなく、やむを得ないなという感じです。フリーのデータべースで似たようなものが全く無かったので。 本当は、プロに見てもらうことが出来れば一番いいですが、、、、、、。もっとこうしたい!ということがあるので、、、。 今回は相談に乗って頂いて本当にありがとうございました。 VBAをまず勉強してアドバイスを無駄にしないように頑張ります!! これはお返事いただかなくても構いませんが、一つずっと疑問に思っていることがあるんです。今私の作っているデータベースはデータとクエリなどのファイルと分割して二つをリンクテーブルで繋いで使っています。そして会社の人たちは、そのクエリなどのファイルの方をネットワークで共有して使います。 その時に非常に遅く表示される人とそうでもない人がいます。これは一体どうしてなのでしょうか? 早くする方法はあるのでしょうか?それとも私のパソコンが悪いのでしょうか? 本当にありがとうございました。
- skikichi
- ベストアンサー率65% (45/69)
う~ん・・・ ちょっとご説明不足だったかもしれません。 まず、「MSysModules2」などのシステムオブジェクトの読み取り権限を剥奪したでしょうか? それから、ログインするにはバッチファイルまたは他の起動用のDBを作成しログインダイアログを表示させる必要があります。 例: "C:\Program Files\Microsoft Office\Office\msaccess.EXE " "Z:\test用\db1.mdb" /wrkgrp "Z:\test用\system.mdw" /user "superuser" /pwd "" このようなコマンドを書き込んだバッチファイルを作成し、このバッチファイルを起動するように統一します。 もちろん、この中身を隠したいのであれば、同じ機能をmdbで作成(db1起動用.mdb)し、mdeに変換して(db1起動用.mde)ソースを隠し、本来のDB名にrename(db1.mdb)してしまえば誰も気が付く人はいません。 もちろん、大元のDB名は変更(db1実態.mdb)する必要があります。 それから、マクロで関数はおそらく使用できると思いますがやった記憶が遠い昔のようで断言はできません。 VBAの方が分かりやすく簡単に実現できますので、サンプルを書きます。 メニューフォームのプロパティーで「イベント」の中にある「開く時」のところで[イベント プロシージャ]を選択し右の「・・・」をクリックすると下記のような記述が出てきます。 Option Compare Database Option Explicit Private Sub Form_Open(Cancel As Integer) End Sub これを、下記に変更してください。 Option Compare Database Option Explicit Private Sub Form_Open(Cancel As Integer) If CurrentUser <> "superuser" Then [ボタン].Visible = False ''' [ボタン].Enabled = False End If End Sub 以上です。
- skikichi
- ベストアンサー率65% (45/69)
デフォルトのユーザーは「管理者」になります。 したがって、ワークグループに入っていない人は「管理者」としてログインします。 まず、「スーパーユーザー」としてユーザー名を新規作成し全権を与えてください。 そして、「管理者」ユーザーから全権を奪ってください。 もちろんユーザーグループからも全権を奪うことを忘れずに。 これで、ワークグループに入っていない人はログイン権限がありませんのでログインできません。 もちろん「スーパーユーザー」は全権を与えられログイン可能です。 あとは、適当に好きな権限を持ったユーザーを作り運用すればよろしいかと思います。 ユーザーの判断は「CurrentUser」関数を使用してください。 コントロールの可視/不可視は「xxx.visible = true」等で可能です。 他にも方法はありますが。 ご不明な点は再質問お願いします。
補足
skikichiさん本当にありがとうございます。 実は、もうその方法を試したのですが、どうやらだめなようで、多分私がうまくセキュリティ設定出来ていないんだと思うんです。それで、最初にセキュリティウィザードで作ったワークグループの前にsystemというワークグループをゴミ箱に捨ててみました。これで、どうなのかわかりませんが、明日違う人のパソコンから確認してみるつもりです。 そしてお恥ずかしながら、今作成し使用しているアプリ(もどき)が私が初めてアクセスというソフトを触り本を片手に作成したものなので、もともとプログラムなどの知識も全くありませんし、全てマクロで作っているんです。VBAを使えばもっといろいろ出来るだろうということは分かるのですが、必要なところは既に8割がた完成と言っていい感じで実際に業務に使用しているものですから、データの量もはんぱじゃありませんし、プログラムを少しでもいじるのが怖いという気持ちがあります。 会社にはアクセスを使える人は一人もいませんし、こんなものでいいのか、、、使える人から見たらかなりひどいものだと思います。 ですので、currentuser関数というのはやはりVBAで組まなければ出来ないものなのですよね?基礎知識が全く無いものでどこから入ればいいのかわかりません。 せっかく良解答を頂いて、こんな相談で申し訳ないですが、マクロからVBAに移行というのは既存のプログラムを壊すこと無く出来ますか?参考になる本とかサイトがあれば教えてください。 業務上において既に欠かせないソフトになっていて、たくさんの人が使っているので、いつ誰かがデータを壊したりいじったりしないか不安なんです。そして知識のない私がそれを直せるかどうかということがもっと不安で、良いアドバイスがあれば、頂ければ幸いです。 本当にありがとうございました。
補足
本当に申し訳ありません。 最初から説明します。 セキュリティの設定をしたのは、セキュリティウィザードからしました。そして、最初はワークグループ管理もしていなかったのですが、ヘルプを見たら「管理者」という最初からあるユーザーを使っていてはだめなような内容だったので、新規ユーザーを作ってワークグループも作ったんです。それで所有者をすべて私のアカウントに換え管理者権限を与え「管理者」からは権利を全て奪いました。ここまでは良かったんです。しかし例えば新しいワークグループ「セキュリティ設定済み1」というファイルがあるのに関わらず、systemというもともとあったワークグループも使用中という時計マークが出てるんです。だから他の人のパソコンから見れてしまうのかと思って、systemというワークグループをゴミ箱に捨ててみました。 そしてみんなにビックリされるのですが、うちの事務所にはサーバーというものがありません。 ですので私が個人的に個人のパソコンでアクセスを使いデータベースを作ったのですが、とあるホームページをみていると、アクセスを分割せずに使用するのは非常に危険と書いてありました。そこで、まずデータベースを tinycoco.mdb と tinycoco_be.mdb に分割しました。それで今それを全員で共有しているフォルダーに入れてる状態です。その中にはもちろんさっき話していたワークグループファイルも存在しています。 更新するデータは毎月ごとに違うデータなので、既存のテーブルに追加するのではなく、新規テーブルとして丸ごと追加します。 それで、そのデータを使うのは契約書の検索した検索結果のフォームに同条件にて販売管理データを検索というボタンがついていて、契約書の検索に使用した条件と同条件にて販売管理の毎月更新しているその新規テーブルのクエリが検索した結果を別ウィンドウで表示するというものです。、、、、、、イメージ湧きますかね、、、、、。T_T 当然そのボタンをクリックすると表示するクエリの参照先のテーブルを毎月新しいテーブルに設定しなおしていますが、クエリはtinycoco.mdbの中に存在していますので、mdbのクエリのデザインを変更すれば、また新たにmdeとして書き出さないとmdeファイルには反映されないんですよね? 今ローカルの共有という画面を開くのも分からない人が多いのでデスクトップ上にショートカットを置いています。だから、それを毎月設置しなおすのも大変かな、、、と思ったんですが、同じファイル名にすればその必要はないんですよね?(常識かもしれませんが、、、) 申し上げました通り、契約関係のデータ管理なので非常に重要かつこれを個人単位でサーバーも無いのに管理しようとするのが、無謀なようです。 友達にseをしている知り合いがいるのですが、その人もアクセスは個人的なツールなのでよく分からないそうです。そんなに重要かつ大量なデータの管理であれば、専門家に外注すべきだとのことです。サーバーも置いて。 話しはそれましたが、私のpcをサーバー代わりに使っていますので、私のpcは常に立ち上げっ放しで、そこから各自私のdbを起動しています。 ですから、他の課の人にいじられないか不安なのと、データベースやpc自体が壊れないかがすごく不安です。私のpcは24時間1年中起動したままなので、こないだも突然動かなくなったり異常に熱くなったりして、かなり危険なにおいがします。このような管理で果たしていいものなのかどうか、、、、、。 システムとかサーバーとか全く勉強したことも興味を持ったことも無かったので、かなり不安です。 なので、もう少しましな管理が出来ればと思ったんですが、、、、、暗い穴にハマってしまったようですね。とにかく今はmdeに変換させるのが先決のようですので、何故出来ないのかもう一度「管理者」に権限を与え見てみます。それとやはりVBAを勉強しなければ、データベースの運営などは到底できそうもないですね。通常の日常的な仕事もありますから、私はエンジニアでもないですし。プログラム化してパソコンにやってもらわなければ!! それと上司に相談してサーバーを買って構築した方が良さそうです。別の画像データやファイルデータも私のpcをサーバー代わりにして共有していてものすごい量なんです。とても個人で管理するのにも普通のパソコンで管理するのにも限界がありそうです。