Accessでデータベースを作成し、複数ユーザーで使用をする際、情報を開示しても良い範囲が異なった場合に閲覧権限を考慮する必要が出てきます。
昨今は情報流出の問題もあり、特に閲覧権限の設定などは重要な処置となります。
そこで今回は、Accessフォームにおいて閲覧権限などのアクセスレベルを設定する方法を紹介します。
サンプルテーブル
まずは、アカウントと閲覧権限を管理するためのテーブルとして「T_ユーザー」テーブルを作成します。
フィールド名とデータ型はそれぞれ、「アカウント: 短いテキスト」、「アクセスレベル: 数値型」とします。
続いて、表1に示すようにサンプルデータを登録します。ここで、注意する点としてアカウント名はパソコンにログインする際の名前であるということです。
表1 サンプルデータ
アカウント | アクセスレベル |
a12345 | 1 |
b34567 | 9 |
c56789 | 9 |
なお、本サンプルにおけるアクセスレベルとして「1」は管理者を、「9」は管理者以外の一般ユーザーとしています。
フォームの作成とコードの実装
続いて、フォームを作成します。図1に示すように、「TEST」と記載されたコマンドボタンを一つ配置し、このコマンドボタンの名前は「cmd_TEST」とします。
配置後、「cmd_TEST」のプロパティを開き、「クリック時」プロパティに「イベントプロシージャ」を設定します。これで、「cmd_TEST」をクリックした際にVBAで実装したコード内容に沿った処理を行う準備ができましたので、続いてコードを実装していきます。
「cmd_TEST」コマンドボタンに設定した「イベントプロシージャ」横の「…」をクリックするとVBA画面が開くため、以下に示すコードを追記します。
Private Sub cmd_TEST_Click() '変数宣言 Dim NetworkObject As Object Dim AccountName As String 'アカウント名の取得 Set NetworkObject = CreateObject("WScript.Network") AccountName = NetworkObject.UserName 'アカウント名からアクセスレベルを取得し条件分岐 If DLookup("アクセスレベル", "T_ユーザー", "アカウント = '" & AccountName & "'") = 1 ThenMsgBox "あなたは管理者です。"
ElseMsgBox "あなたは管理者ではありません。"
End If End Sub
さて、各コードの内容を確認していきましょう。
変数宣言をした後、「NetworkObject」を用いて「UserName」を取得します。これらアカウント名取得のために記載した2行のコードは定型として使用してもらえれば良いと思います。
次に、「T_ユーザー」テーブルでアクセスレベルを「1」と「9」と割り振っていますが、アカウント名が取得できた段階でDLookUp関数を用いて、ユーザーのアクセスレベルを取得するというルーチンにしています。
ここで、DLookUp関数については以下の記事をご参照ください。
得られた値から、管理者の場合はTrueを、そうでなければ管理者ではないとしてFalseを返すようにしています。実際には、アクセスレベルを段階的に設定し、これに応じた閲覧権限を付与することが可能です。アクセスレベルを数字で管理しているのは、複数のレベルがある場合に、「~以上」や「~未満」等のように一律で設定することができるからです。例えば、部長、課長をそれぞれ「1」、「2」とアクセスレベルに設定し、課長以上の役職の人に閲覧権限を与えたい場合、「<=2」として条件設定ができるわけです。
改めて、全てのコードを記載したVBA画面を図2に示します。
ここまでで、コードの実装もできましたので、あとはどのように動くかを確認しましょう。
「T_ユーザー」テーブルに登録したアカウントでログインし、「TEST」ボタンをクリックします。
すると、管理者として設定したアカウントの場合とそうでない場合とで処理が分岐され、図3に示すような結果が得られると思います。
まとめ
今回は情報セキュリティの観点からアカウント名に応じた閲覧権限の設定方法を紹介しました。昨今の情報管理については厳格化される一方ですが、ちょっとした仕組みで閲覧権限を設定することができますので、Accessでデータ管理をされている場合は、実装されてみてはいかがでしょうか。
より詳しい内容を知りたい方は、専門書なども参考になると思いますので、お手元に1冊用意されてみてはいかがでしょうか。
スポンサーリンク
コメント