- ベストアンサー
アクセス97のテーブルを直接いじれなくする方法はある?
- アクセス97のテーブルを直接いじれないようにする方法について考えています。
- フォームでのデータの読み書きはできるが、テーブルを直接覗いてデータ変更したり、削除する人がいるため、問題が発生しています。
- 現在の対策としては、MDEファイルにしてテーブルを隠していますが、解除されることもあるため、他の方法を模索しています。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
またよく考えたら… データ用mdbとプログラム用mdbの両方に、データベースウィンドウが出ない設定にしてAllowBypassKeyをかけたらOKかも…。 だめかな・・・。
その他の回答 (6)
- gadd3
- ベストアンサー率46% (211/451)
> 起動時の設定で、「既定のショートカットメニュー」をオンにして、 >「ツールバー/メニューの変更」をオフに設定すると、 >「ユーザー設定」も表示しないようにできましたのでバッチリ!です。 ↑やっと意味がわかりました。これは便利かもしんないですね。ある程度の自由が与えられますね。僕も勉強になりました。ありがとうございます。
補足
まず、基本的に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なのでパスワードを探られてしまうことはありません。 記述内容は上記ソースの逆になります。 これにより、次回起動時はすべての制限が解除された状態 で立ち上がります。
- gadd3
- ベストアンサー率46% (211/451)
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破損の時などにデータのインポート・エクスポートなどができなくなってしまって不便かもしれません。 めんどくさいですが、アクセス権限ごとにプログラムファイルを数種作れば、簡易的て手軽なセキュリティができそうですね(^^)。 以上、もしすでに解決されているならごめんなさい。
お礼
毎回、詳細なご説明本当にありがとうございます。 しかし、gadd3さんもお気づきのように比較的簡単な方法で 解決いたしました。 それも、すべてgadd3さんのご指摘があったおかげです。 本当にありがとうございました。
補足
失礼いたしました。 お返事の順番がわかり辛かったですよね。ごめんなさい。 でも、こちらのシステムでは投稿者の返信の機会が 2回まで(補足とお礼)しか許されないのでなかなか苦労します。 ちゃんと分かりやすくお返事すればよかったですよね。 すみませんでした。
- gadd3
- ベストアンサー率46% (211/451)
書き終わってから気が付きました。 プログラムファイル側でリンクテーブルを開かれたらおわりですね。 うう!恥ずかしい!さっきの(↓)は全部忘れてください。
お礼
鉄壁のプロテクトができました。 起動時の設定で、「既定のショートカットメニュー」をオンにして、 「ツールバー/メニューの変更」をオフに設定すると、 「ユーザー設定」も表示しないようにできましたので、 バッチリ!です。 ありがとうございました。 大変いいヒントをいただきました。 助かりました。
- gadd3
- ベストアンサー率46% (211/451)
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にしても良いと思います(が、慎重に動作確認してくださいね。) これでだめだったらごめんなさい。
- taranko
- ベストアンサー率21% (516/2403)
目くらましぐらいにしかならないかもしれませんが、右クリック→ プロパティーで隠しオブジェクトで見えなくなります。 見たいときはツール→オプション→表示の表示オプションの 隠しオブジェクトにチェックを入れれば見れます。 そこでまた隠しオブジェクト以外に変更もできます。
- ats8181oyaji
- ベストアンサー率38% (94/244)
こんにちは、ats8181oyajiです そこまで管理されたいのでしたら アクセスのみの運用では無理(限界)ではないでしょうか。 簡単にユーザーコンピューティング(EUC)可能な環境とデータ保護は 相反することですもんね。 案としましては データベースはアクセス。プログラムの部分はVisualBasicで 作成すれば、保護という問題は解決です。 EUCの部分は、必要なデータをCSV吐き出しのような機能を組み込んで まったくデータとは切り離し、エクセルやローカルのアクセスで 編集してもらう。。。。 どっちにしてもアクセスだけで実現する方法は思いつきませんでした。 ごめんなさい。
お礼
解除できました。あ~ビックリした。 でも、今度は新たな難問が。 データベースウィンドウが表示されていなくても、 ツールバーのところで右クリックして「ユーザー設定」で データベースウィンドウのボタンを表示することができます。 あ~困った。。。
補足
試験的にやって、自らハマッてしまいました! AllowBypassKeyでshiftキーを押してもデータベースウィンドウが 表示されないようになりました。 しかし、データベースウィンドウを再表示する方法が分からず 復旧不可能です!(涙) どうすればデータベースウィンドウが表示されるでしょうか?