- 締切済み
ACCESSで利用者制限
利用環境:サーバー WindowsXPPro クライアント WindowsXP,98,ME アプリケーション ASP(VBScript) Access初心者です。 1.アクセスのDBファイルをサーバーに置きます。 2.通常の利用者はWebブラウザから自作のアプリケーションでAccessにアクセスします。 3.サーバーは全員が自由に通常使えます。 以上の条件で特定の人だけがAccessのDBファイルに直接 さわれるように制限するにはどうしたらいいのでしょうか?OSでの利用者制限は考えてません。 あくまで直接AccessのDBファイルを操作できるひとを 制限したい場合です。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- gadd3
- ベストアンサー率46% (211/451)
当方Access2000ですが、ほとんど操作性は同じだと思いますので…。 DBがmdb拡張子のファイルだと仮定して話をすすめます。 通常は、mdbファイルにパスワードをかけるには、目的のmdbファイルを排他モードで開いて「ツール」「セキュリティ」「データベースパスワードの設定」で設定します。 が、この方法だと他のパソコンからアクセスできなくなる場合がありますので、もしそれを回避したい場合は別の手でやります。 別の手とは、VBAで簡易的なセキュリティをかける方法です。DAOなどを使えばもちろんデータベース内のレコードにアクセスできてしまいますが、「一般ユーザーはDAOやADOなんか知らんから大丈夫!」とか、「ユーザーのアクセス権別にセキュリティ設定をするほどでもない、逆にそうすると管理がたいへん」という場合に有効です。 具体的にはVBAにてmdbのAllowBypassKeyプロパティを設定します。 設定のおおまかな流れとしては以下のような感じです。 (1)パスワード入力用のフォーム等を作る (2)「起動時の設定」で、(1)で作ったフォームが一番最初に開くように設定する。 (3)AllowBypassKeyプロパティをFalseに設定する。 パスワードを忘れると二度と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マクロか「起動時の設定」メニューで起動時に最初に開くようにします。 パスワード入力時に「******」という表示にしたかったら、テキストボックスの定型入力プロパティに「Password」と入力します。 ただ、ここまでやっただけでは、Shiftキーを押しながらmdbを開くと、パスワード入力用フォームが起動しないので、パスワードロック無効になってしまいますので、AllowBypassKeyプロパティを使って、Shiftキーを押しながらのmdbオープンをできなくします。 ●≪Shiftキーを押しながらのmdbオープンをできなくする方法≫ データベースウィンドウの「モジュール」をクリックして、適当なモジュールを新規作成します。名前は何でもいいです。そして以下のコードをコピペして、Sub SetBypassProperty()のプロシージャを実行します。実行するには、コピペしたあと、2行目、3行目の、 Const DB_Boolean As Long = 1 ChangeProperty "AllowBypassKey", DB_Boolean, False と書いてあるところのどこかにカーソルを置いて、F5キーを押します。これは、1度実行すればOKです。 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をいったん閉じて、Shiftキーを押しながらmdbを開いてみて、ちゃんとパスワード用のフォームが開くか確認します。ひらかなかったら最初からやり直してみてください。 くれぐれもパスワードを忘れないように…(^^) 解除するには、上記コードのChangeProperty "AllowBypassKey", DB_Boolean, False の行のFalseをTrueに書き換えて再度実行します。 詳しくは、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=497940 なども見てみてください。 ではでは~