パスワードで保護されたデータベースを作成する
SOFTWARE REPORT
Microsoft Access 2000
Access 2000 は、Microsoft 社の Microsoft Office 2000 に付属している簡易データベースです。
現在は Microsoft Office XP の Access 2002 が最新版ですけど、個人的に Office XP を持っていないので、Access 2000 のお話です。
この Access 2000 ですが、使い勝手が非常にいい感じだし、価格も安めだし、データベースが1つのファイルとして構成されているのでバックアップが楽など、手っ取り早く利用するにはもってこいなのですけど、セキュリティの面で今ひとつな感じがしたため、積極的に利用するというわけには行きませんでした。
けれど、ちょっと見てみたところ、どうやらアカウントごとにアクセスを制限する機能があるようなので、これを試してみることにしました。
これのよしあしによっては、使える環境の幅がぐっと広がりそうです^^
セキュリティを設定する
さっそく、セキュリティ設定をしてみることにします。
たとえば db1.mdb というデータベースがあったとして、まずはそれを普通に開きます。そして、「ツール」 → 「セキュリティ」 → 「セキュリティウィザード」 を選択します。
するとウィザードが起動しますので、それに沿って設定を行います。
STEP.1 - ワークグループ情報ファイル
まずはワークグループ情報ファイルに関する選択です。
「新しいワークグループ情報ファイルを作成する」 と 「現在のワークグループ情報ファイルを変更する」 の2つの選択肢があるようですけど、今回は初めだからか、「新しいワークグループ情報ファイルを作成する」 のみが選択可能となっています。
ので、「新しいワークグループ情報ファイルを作成する」 を選択して次へ進みます。
STEP.2 - 情報ファイルの設定
作成するワークグループ情報ファイルの名前と、ID とかを設定できるようです。今回はディフォルトのままを使用することにしました。
ディフォルト設定では、ファイル名は 「セキュリティ設定済み.mdw」 のようです。
また、ここではこのセキュリティ設定の扱われ方も指定できるようです。
「現在のワークグループ情報ファイルを規定のファイルに設定する」 を選択することで、おそらく、今回設定したセキュリティ設定を規定値として利用できるのでしょう…。
とりあえず、今回は 「セキュリティ設定されたデータベースへのショートカットを作成する」 を選択してみることにしました。
STEP.3 - 設定オブジェクトの選択
テーブルやマクロなどのオブジェクトの中から、セキュリティ設定を変更したいものを選択します。
今回は初の設定なので、すべてのオブジェクトを選択しておきました。
STEP.4 - セキュリティグループの選択
使用するセキュリティグループを選択します。
選択できるグループを次の表にまとめてみました。内容はセキュリティウィザードでそのグループを選択したときに表示されるものを参考にしています。
バックアップ実行者 | 最適化やバックアップのためにデータベースを排他的に開けるが、データを見ることができない。 |
---|---|
フルデータユーザー | デザイン設計ができないが、データの操作は可能。 |
すべての権限所有者 | ユーザの権限を設定できない以外は、すべての操作が可能。 |
新規データユーザー | データを参照および追加できる。 |
プロジェクト設計者 | テーブルとリレーションの変更を除く、ほかの操作が可能。 |
読み取り専用ユーザー | データの参照のみが可能。 |
更新データユーザー | データを参照および更新できる。 |
必要なグループを選択して、次へ進みます。
STEP.5 - ユーザーグループの設定
一般ユーザの権限を設定できるようです。今回は一般ユーザにはアクセス許可を行わないように、「ユーザーグループには一切権限を与えない」 を選択しておきました。
STEP.6 - ユーザーの追加
情報ファイルに登録するユーザの設定です。
<新しいユーザの追加> を選択して、右側のボックスにユーザ名とパスワードを入力します。そして 「このユーザーをリストに追加する」 ボタンを押して、リストへ追加します。
必要なだけユーザを追加したら、次へ進みます。
STEP.7 - グループの選択
登録したユーザのグループを指定します。
指定できるユーザは、STEP.6 で登録したユーザで、選択できるグループは STEP.4 で選択したセキュリティグループです。
STEP.8 - バックアップの作成
セキュリティ設定を施す前の状態をバックアップします。規定では、もともとのファイル名の拡張子を .bak にしたものが作成されるようになっています。
これで、「完了」 ボタンを押すと、セキュリティ保護されたデータベースが出来上がります。
このとき設定に関するレポートが表示されます。これは何かのときに復元等に利用できるそうなので、保存しておくのがよさそうです。
出来上がったファイル
セキュリティ設定ウィザードを終えると、いくつかのファイルが出来上がりました。
もともとのファイルを db1.mdb として、ディフォルトの設定で出来上がったファイルは次のとおりです。
db1.mdb(ショートカット) | 今後はこれを使用してデータベースを開きます。 |
---|---|
db1.mdb | セキュリティ設定され、暗号化されたファイルです。 |
db1.bak | セキュリティ設定を施す前のファイルです。この拡張子を .bak から .mdb に変更することで、元の状態を取り戻せます。 |
db1.snp | ウィザードの指示で結果レポートを保存した場合に出来上がるファイルです。 |
セキュリティ設定済み.mdw | ワークグループ情報が記録されたファイルです。 |
保護されたデータベースを開く
セキュリティ保護を行った場合、従来の db1.mdb ファイルはそのままでは開くことができなくなります。開くためには、ウィザードによって作成してもらったショートカットのほうを開きます。
ショートカットは次のような感じの内容になっています。
"C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" "C:\デスクトップ\db1.mdb" /WRKGRP "C:\デスクトップ\セキュリティ設定済み.mdw"
このショートカットには、本来のデータベースファイルのほかに、ワークグループ情報ファイルの情報も付加された形で Access 2000 が開かれるように設定されています。
これを開くことで、ユーザ名とパスワードの問い合わせがなされるので、適切な情報を入力すると、データベースへアクセスすることができるようになります。
ファイルを移動する
ファイルを別のフォルダへ移動するためには、データベース本体とワークグループ情報ファイルを移動した上で、ショートカットの内容も変更する必要があります。
情報ファイルは /WRKGRP オプションで指定すればいいので、同一フォルダ上にある必要はないようです。
OLE DB データベースとして使用する
パスワード保護つきの Access 2000 データベースを OLE DB として ADO から利用する場合には、次のようなパラメータを指定します。
Provider | Microsoft.Jet.OLEDB.4.0 |
---|---|
Data Source | ※ *.mdb ファイルへの絶対パス |
Persist Security Info | False |
Jet OLEDB:System Database | ※ *.mdw ファイルへの絶対パス |
Jet OLEDB:Database Password | ??? |
User ID | ※ アクセスの際に使用するユーザ名 |
Password | ※ アクセスの際に使用するパスワード |
とりあえず、Jet OLEDB:Database Password の意味がわからなかったのでそれは空白として、ほかの情報をしっかりとうめて接続してみたところ、VBScript から ADO を使って接続することができました。してしなくても平気なようです。
また、Persist Security Info は、「機密扱いの認証情報を保存するかどうか」 というもののようです。True ならば保存する、False ならば保存しないということのようです。
接続文字列は、具体的にはこのような感じになります。
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\db1.mdb;Persist Security Info=False;Jet OLEDB:System Database=c:\temp\db1.mdw;Jet OLEDB:Database Password=;User ID=xxx;Password=****;
ただ、Windows XP Professional 上でのテストは通過したのですけど、もっていった先の Windows 2000 上ではうまくいかないようです。MDAC (Microsoft Data Access Component) 2.7 を入れてみてもだめでした。
もしかすると Microsoft Access をインストールしないとだめなのかもしれないですね。でも今は Access あまっていないので実験できませんでした。