プロが教える店舗&オフィスのセキュリティ対策術

アクセス97です。
NTにあるDBを複数人で共有して使用しております。
クライアントはWin-95とWin-2000です。

フォームでデータの読み書きはできるのですが、
ときどき、テーブルを直接覗いてデータ変更したり、削除する人が
います。
更新日付が変わらなかったり、データが一部壊れたりして困っています。

テーブルのデータやクエリーやモジュールを直接いじれなくする方法は
ないでしょうか?

現在、MDEファイルにしているので、フォームはいじれません。
表示オプションでテーブルは隠しモジュールにしています。
でも、知っている人は簡単に解除できますよね。
困った。

ワークグループをつくり、アクセス権を設定するのはやりたくありません。
以前、管理に多大の勢力を使った経験があるので。

何か簡単にテーブルやクエリーをいじれなくする方法はないでしょうか?

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

A 回答 (7件)

またよく考えたら…


データ用mdbとプログラム用mdbの両方に、データベースウィンドウが出ない設定にしてAllowBypassKeyをかけたらOKかも…。
だめかな・・・。

この回答への補足

試験的にやって、自らハマッてしまいました!

AllowBypassKeyでshiftキーを押してもデータベースウィンドウが
表示されないようになりました。

しかし、データベースウィンドウを再表示する方法が分からず
復旧不可能です!(涙)
どうすればデータベースウィンドウが表示されるでしょうか?

補足日時:2003/03/17 14:19
    • good
    • 0
この回答へのお礼

解除できました。あ~ビックリした。
でも、今度は新たな難問が。
データベースウィンドウが表示されていなくても、
ツールバーのところで右クリックして「ユーザー設定」で
データベースウィンドウのボタンを表示することができます。
あ~困った。。。

お礼日時:2003/03/17 16:32

> 起動時の設定で、「既定のショートカットメニュー」をオンにして、


>「ツールバー/メニューの変更」をオフに設定すると、
>「ユーザー設定」も表示しないようにできましたのでバッチリ!です。

↑やっと意味がわかりました。これは便利かもしんないですね。ある程度の自由が与えられますね。僕も勉強になりました。ありがとうございます。

この回答への補足

まず、基本的にMDEで作成しソースを非公開とします。

制限の設定:
MDE起動時にautoexecで指定したモジュールで以下の設定を走らせます。
===
ChangeProperty "StartupShowDBWindow", dbBoolean, False
ChangeProperty "StartupShowStatusBar", dbBoolean, True
ChangeProperty "AllowBuiltinToolbars", dbBoolean, False
ChangeProperty "AllowFullMenus", dbBoolean, False
ChangeProperty "AllowBreakIntoCode", dbBoolean, True
ChangeProperty "AllowSpecialKeys", dbBoolean, False
ChangeProperty "Allowtoolbarchanges", dbBoolean, False

ChangeProperty "AllowBypassKey", dbBoolean, False
===
これで、次回起動時から鉄壁の制限がかかります。
Shiftキーを押しながら起動してもこの制限は破れません。

制限の解除方法:
メインメニューには、上記制限を解除するボタンを付けておきます。
このボタンはもちろんパスワードを入力しないと実行しないように
VBAで仕掛けておきます。
MDEなのでパスワードを探られてしまうことはありません。
記述内容は上記ソースの逆になります。
これにより、次回起動時はすべての制限が解除された状態
で立ち上がります。

補足日時:2003/03/18 14:27
    • good
    • 0

onakagooさんの「お礼」等の順番とかが良くわからなかったので、まだ解決していないものとしてまた書きますね。

(上から順番いn「お礼」を読むとすでに解決されているようですが…(^^))

あれから自分もやってみました。
考え方としては、以下のようなかたちです。

・パスワードを入力するフォームを作成
・パスワードを2種類用意
ユーザー用のメインフォームを開くためのパスワードと、
Shiftキーを無効化/無効化解除フォームを開くためのものを2つ。
・Shiftキーを無効化/無効化解除するためのフォームを作成
コマンドボタンを2つ作り、それぞれでShiftキーを無効化/無効化解除
できるようにする
・起動時の設定では、オリジナルメニューバーか最低限のメニューしか
表示されないようにする。
また、最初にパスワード入力フォームが表示されるようにする。
・パスワード入力フォームの更新後処理イベントに
ユーザー用メインフォームがオープンする処理とShiftキー無効化/解除フォーム
がオープンする処理とをパスワードで分岐させるif文を書く。
どちらにも当てはまらないならAccessを閉じる処理を書く


具体的には以下のような感じでやりました。Access2000+Win98(無印)の環境なので、あてはまらないことがあったらごめんなさい。

(1)起動時の設定で、ステータスバー以外のメニュー表示がされないようにする。
具体的には以下。
・アプリケーションタイトル…入力なし
・アプリケーションアイコン…入力なし
・メニューバー既定の設定…アプリ用専用ツールバーの名前を指定
・すべてのメニューを表示する…OFF
・既定のショートカットメニュー…OFF
・フォーム/ページの表示…パスワード入力用のフォーム名を指定
・データベースウィンドウの表示…OFF
・ステータスバーの表示…ON
・ショートカットメニューバー…(既定の設定)
・組み込みツールバー…OFF
・ツールバー/メニューの変更…OFF



(2)起動時にオープンするパスワード入力用フォームのプロパティ設定
・スクロールバー…なし
・レコードセレクタ…いいえ
・移動ボタン…いいえ
・区切り線…いいえ
・ポップアップ…はい
・境界線スタイル…ダイアログ
・最小化/最大化ボタン…なし
・閉じるボタン…はい



(3)Shiftキー無効化/解除フォームのプロパティ
同上



(4)Shiftキー無効化/解除フォームのコマンドボタンを作成
2つ作ります。


●Shiftキー無効化解除のコマンドボタンのクリックイベントのコード

Const DB_Boolean As Long = 1
ChangeProperty "AllowBypassKey", DB_Boolean, True
Quit

●Shiftキー無効化のコマンドボタンのクリックイベントのコード

Const DB_Boolean As Long = 1
ChangeProperty "AllowBypassKey", DB_Boolean, False
Quit


(5)起動時にオープンするパスワード入力用フォームの更新後処理イベントに
以下のように記述。パスワードが「123456」だったらユーザー用フォームを開き、
「789」だったらShiftキー無効化/解除フォームを開くようにする。
どちらにも当てはまらないならAccess終了。


If Me!txtbox1 = "123456" Then

DoCmd.OpenForm "ユーザー用メインフォーム名"
DoCmd.Close acForm, "パスワード入力フォーム名", acSaveYes

ElseIf Me!txtbox1 = "789" Then

DoCmd.OpenForm "Shiftキー無効化/解除フォーム名"

Else

Quit

End If



(6)標準モジュールに前回のFunctionプロシージャのコードを貼り付けておく



以上で、どこを右クリックしても何も出てきませんでした。
起動時の設定を1つずつONにしても大丈夫でした。

なお、この方法だと、外部からDAOやADOでアクセスしてくる場合は防げませんが、でも、テーブルの直接書き換えを防ぐだけなら有効のように思います。
逆にDAOやADOでアクセスを制限すると、mdb破損の時などにデータのインポート・エクスポートなどができなくなってしまって不便かもしれません。
めんどくさいですが、アクセス権限ごとにプログラムファイルを数種作れば、簡易的て手軽なセキュリティができそうですね(^^)。

以上、もしすでに解決されているならごめんなさい。

この回答への補足

失礼いたしました。
お返事の順番がわかり辛かったですよね。ごめんなさい。
でも、こちらのシステムでは投稿者の返信の機会が
2回まで(補足とお礼)しか許されないのでなかなか苦労します。
ちゃんと分かりやすくお返事すればよかったですよね。
すみませんでした。

補足日時:2003/03/18 14:26
    • good
    • 0
この回答へのお礼

毎回、詳細なご説明本当にありがとうございます。
しかし、gadd3さんもお気づきのように比較的簡単な方法で
解決いたしました。
それも、すべてgadd3さんのご指摘があったおかげです。
本当にありがとうございました。

お礼日時:2003/03/18 14:49

書き終わってから気が付きました。


プログラムファイル側でリンクテーブルを開かれたらおわりですね。
うう!恥ずかしい!さっきの(↓)は全部忘れてください。
    • good
    • 0
この回答へのお礼

鉄壁のプロテクトができました。
起動時の設定で、「既定のショートカットメニュー」をオンにして、
「ツールバー/メニューの変更」をオフに設定すると、
「ユーザー設定」も表示しないようにできましたので、
バッチリ!です。
ありがとうございました。
大変いいヒントをいただきました。
助かりました。

お礼日時:2003/03/17 17:06

MDEのままじゃないといけませんか?


もしMDEからデータを書き出して、MDEを作ったもとのMDBに吸い込めるなら、mdbにデータを吸い込んだあと、テーブルとプログラム部分(フォーム、クエリ等)を分割して、適当なフォームを作ってパスワードを入力しないとmdbが開けないように設定したらどうでしょう?
(データの書き出しと吸い込み、テーブルとフォーム等の分割がとても面倒くさいですが…。ただ一回やってしまえばあとは楽チンだと思います。)

**********************

≪パスワード設定の方法≫

データ用mdb(テーブルのみのmdb)に「フォーム1」というフォームをつくり、そのなかにテキストボックス「txtbox1」を作ります。パスワードは「123456」だとします。

で、「txtbox1」の更新後処理に以下のように記述します。コピペでOKです。


If Me!txtbox1 = "123456" Then
DoCmd.Close acForm, "フォーム1", acSaveYes
Else
Quit
End If

これでパスワード「123456」を入力しないかぎり、データ用mdbは必ず閉じてしまいます。このフォームをAutoExecマクロか「起動時の設定」メニューで起動時に最初に開くようにします。

次にShiftキーを押しながらのファイルオープンを無効にします。
適当なモジュールに以下のコードをコピペして、Sub SetBypassProperty()のプロシージャを実行します。1度実行すればShiftキーを押しながらmdbを開いても起動時の設定が有効になったままです。データベースウィンドウが表示されない設定になっていれば表示されません。
解除するには、ChangeProperty "AllowBypassKey", DB_Boolean, False の行のFalseをTrueに書き換えて再度実行します。


Sub SetBypassProperty()
Const DB_Boolean As Long = 1
ChangeProperty "AllowBypassKey", DB_Boolean, False
End Sub

Function ChangeProperty(strPropName As String, varPropType As Variant, varPropValue As Variant) As Integer
Dim dbs As Object, prp As Variant
Const conPropNotFoundError = 3270

Set dbs = CurrentDb
On Error GoTo Change_Err
dbs.Properties(strPropName) = varPropValue
ChangeProperty = True

Change_Bye:
Exit Function

Change_Err:
If Err = conPropNotFoundError Then ' プロパティが見つかりません。
Set prp = dbs.CreateProperty(strPropName, _
varPropType, varPropValue)
dbs.Properties.Append prp
Resume Next
Else
' 認識できないエラー。
ChangeProperty = False
Resume Change_Bye
End If
End Function


これができたら一応mdbをバックアップしておきます。もちろんこれもパスワード「123456」を知らない限り、FalseをTrueに書き換えることはできません。

なお、mdeを作るとFalseをTrueに書き換えることができなくなってしまうので、データ用mdbはmdbのまま使います。プログラム用のmdbはたぶんですが、mdeにしても良いと思います(が、慎重に動作確認してくださいね。)

これでだめだったらごめんなさい。
    • good
    • 0

目くらましぐらいにしかならないかもしれませんが、右クリック→


プロパティーで隠しオブジェクトで見えなくなります。
見たいときはツール→オプション→表示の表示オプションの
隠しオブジェクトにチェックを入れれば見れます。
そこでまた隠しオブジェクト以外に変更もできます。
    • good
    • 0

こんにちは、ats8181oyajiです



そこまで管理されたいのでしたら
アクセスのみの運用では無理(限界)ではないでしょうか。
簡単にユーザーコンピューティング(EUC)可能な環境とデータ保護は
相反することですもんね。

案としましては
データベースはアクセス。プログラムの部分はVisualBasicで
作成すれば、保護という問題は解決です。
EUCの部分は、必要なデータをCSV吐き出しのような機能を組み込んで
まったくデータとは切り離し、エクセルやローカルのアクセスで
編集してもらう。。。。

どっちにしてもアクセスだけで実現する方法は思いつきませんでした。
ごめんなさい。
    • good
    • 0

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

関連するカテゴリからQ&Aを探す