Accessユーザーレベル セキュリティを使用する方法

◆概要
 この資料は、Microsoft AccessでAccessユーザーレベル セキュリティを使用する方法について記載しています。


 ユーザーレベル セキュリティは、アプリケーションの機密データ、コード、およびオブジェクトのデザインを保護する柔軟で確実な方法です。また、Accessでは、機密データやオブジェクトへの異なるレベルのアクセスの設定は、ユーザーレベル セキュリティを使用した場合にのみ実現できます。

アプリケーションにユーザーレベル セキュリティを設定する前に、Accessのユーザーレベル セキュリティ モデルについて理解しておく必要があります。以下に、ワークグループを基にしたユーザーレベル セキュリティ モデルについて説明します。ユーザー アカウントやグループ アカウントを作成し、ワークグループを作成して権限を設定する方法と、セキュリティ ウィザードなどのAccessに付属するツールを使ってデータベースを保護する方法について説明します。また、データベース アクセス オブジェクト(DAO)を使ってVisual Basicでセキュリティを設定して、Accessのメニュー コマンドでは行うことのできないセキュリティ操作を行うことができます。


参照 Visual Basicを使ったセキュリティの設定方法の詳細については、「14.2.7 データ アクセス オブジェクトを使用してユーザーレベル セキュリティを設定する」を参照してください。

◆14.2.1 Accessユーザーレベル セキュリティ モデル

多くのデータベース システムのセキュリティ モデルとは異なり、Accessの主なセキュリティ モデルは、"共有レベル"セキュリティモデルではなく、"ユーザーレベル"セキュリティモデルです。Accessでも単純な共有レベル セキュリティの設定、つまりパスワードを使ったデータベースの保護を行うことができます。Accessのユーザーレベル セキュリティは、Micorosoft Windows NT Serverなどの多くのネットワーク システムで使われているセキュリティに似ています。ユーザーは、[ログオン]ダイアログ ボックスに名前とパスワードを入力してAccessを起動します。入力した名前とパスワードが、ワークグループ情報ファイルのデータと照合され、ユーザーが識別されます。パスワードは、ユーザーを識別するためのもので、ネットワーク上のほかユーザーに影響を与えることなく、ユーザーがいつでも変更できます。また、ログオン時には、各ユーザーは1つまたは複数のグループのメンバーとして識別されます。


ユーザーが保護されたデータベースを開くと、オブジェクト(データベース自体も含む)に対してユーザーに割り当てられたアクセス権が確認され、そのオブジェクトに対するユーザーのアクセスレベルが決まります。同じオブジェクトに対して、ユーザーまたはグループごとに別の権限を設定できます。ユーザーがフォームを開く、クエリーを実行する、テーブルのデータを修正するなど、オブジェクトに対して処理を実行しようとするたびに、そのユーザーまたはユーザーが属するグループに、その処理を実行するために必要な権限が設定されているかどうかが確認されます。権限がある場合には、処理が実行されます。権限がない場合、処理を実行する権限がユーザーに与えられていないことを示すメッセージが表示され、処理は実行されません。

 これとは異なり、共有レベル セキュリティを提供するデータベースでは、パスワードが特定のオブジェクトと関連づけられ、そのオブジェクトにアクセスするためにはパスワードを入力する必要があります。特定のオブジェクトにアクセスするためのパスワードを知っているユーザーはそのオブジェクトにアクセス可能で、ユーザーにアクセスのレベルは与えられたパスワードによって決まります。たとえば、管理者にはテーブルのレコードの変更が可能な更新パスワードを与え、一般のユーザーにはレコードの表示のみが可能な読み取りパスワードのみを与えることができます。

Accessのユーザーレベル セキュリティでも次のようにして、共有レベル セキュリティと同様なことを行うことができます。[データの変更]権限を与えら得た[マネージャ]グループと[データの読み取り]権限のみが与えられた[スタッフ]グループを作成し、各ユーザーを適切なグループに割り当てます。ユーザーは、Accessにログオンしたときに適切なグループのメンバーであることが確認されているので、オブジェクトにアクセスするときにパスワードを入力する必要がありません。

ワークグループと権限情報の保存場所

ユーザーおよびグループに関する情報は、"ワークグループ情報ファイル"と呼ばれるデータベースに保存されます。ワークグループ情報ファイルには、次の情報が保存されます。

  • 各ユーザー名およびグループ名。
  • 各グループを構成するユーザー一覧。
  • 各ユーザーおよびグループのセキュリティID(SID)。SIDは、コンピュータによって生成される読み取り不可能なバイナリ文字列で、ユーザーまたはグループを一意に識別します。
  • 各ワークグループ情報ファイルは"ワークグループ"を定義し、多くのAccessデータベースによって使われます。ワークグループとは、マルチユーザー環境でデータおよびワークグループ情報ファイルを共有するユーザーのグループのことです。[ツール]メニューの[セキュリティ]サブメニューの[ユーザー/グループのアカウント]ダイアログ ボックスを使って、ユーザー、ユーザーのパスワード、およびユーザーが所属するグループを管理します。

参照 ユーザーおよびグループの詳細については、「14.2.1 Accessユーザーレベルセキュリティ モデル」の「ユーザーとグループ」を参照してください。

データベースのオブジェクトに対するユーザーやグループの権限は、そのデータベース内のシステム テーブルに保存されます。新しいワークグループ情報ファイルが作成されても、データベースのオブジェクトに関連づけられた権限は変わりません。権限は、[ユーザー/グループの権限]ダイアログ ボックスの[権限]タブと[所有者の変更]タブで割り当てられます。設定された情報は、開かれているデータベースのオブジェクトのみ影響し、ワークグループ情報ファイルには影響しません。

使われているワークグループ情報ファイルの場所は、Winodwsレジストリに指定されています。Accessワークグループ管理を使って、新しいワークグループ情報ファイルを作成するか、または使用するファイルを指定することができます。Accessの起動時に/wrkgrpコマンドライン オプションを使って、使用するファイルを指定することもできます。


参照 Accessワークグループ管理の使い方の詳細については、オンラインヘルプの[キーワード]タブで[Microsoft Access ワークグループ管理]の項目を検索し、説明を参照してください。Windowsレジストリにワークグループ情報ファイルを指定する方法の詳細については、オンライン ヘルプの[キーワード]タブで「ワークグループ情報管理、レジストリで指定する」の項目を参照し、説明を参照してください。

▼ページトップに戻る

ユーザーとグループ

[ツール]メニューの[セキュリティ]サブメニューの[ユーザー/グループのアカウント]ダイアログボックスを使って、ワークグループの新規ユーザーおよび新規グループのアカウントを作成します。新規ユーザーアカウントや新規グループ アカウントを作成するときに、ユーザー名と"パーソナルID(PID)"を入力します。PIDは、大文字と小文字が区別された4〜20文字の英数字の文字列です。これらのデータは、そのアカウントに対する セキュリティID(SID)を生成するために使われます。SIDは、Accessの内部でユーザーやグループを確認するために使われます。PIDは、パスワードではありません。ユーザーアカウントやグループアカウントを作成するときにのみ使われます。ユーザーのパスワードは、そのユーザーに対するアカウントが作成されると初めて指定できます。


重要 ユーザー アカウントやグループ アカウントを作成するために使用する名前とPIDは大文字と小文字の区分も含めて、正確にメモなどに書き留めて、安全な場所に保管しておいてください。ワークグループ情報ファイルの破壊や紛失により再度作成が必要になった場合、その名前とPIDを再入力し、作成時のユーザー アカウントやグループ アカウントのSIDを復元する必要があります。また、Acessワークグループ管理を使って、これらのアカウントが含まれる同じワークグループ情報ファイルを作成する必要があります。その際、ワークグループ情報ファイルが最初に作成されたときに使われたユーザー名、会社名、およびワークグループID(WID)を再入力します。同じワークグループ情報ファイルの作成方法の詳細については、次の「[管理者]」を参照してください。

Accessのワークグループ情報ファイルには、以下の既定のユーザー アカウントおよびグループ アカウントが含まれています。

  • [管理者] 既定のユーザー アカウントです。ユーザーレベルのセキュリティが設定されるまで、すべてのユーザーは、Accessを起動すると、自動的に[管理者]ユーザー アカウントを使ってログオンされます。その結果、[管理者]ユーザーは、データベースに作成されたすべてのオブジェクトを所有し、それらに対するすべての権限を持つことになります。[管理者]ユーザーのSIDは、すべてのAccessとVisual Basicで共通なので、[管理者]ユーザーが所有している、または権限を持っているすべてのオブジェクトは、AccessやVisual Basicを使っているユーザーであれば誰でも使うことができます。このため、ユーザーレベルのセキュリティを設定する場合は、保護するオブジェクトに対する所有権や権限を[管理者]ユーザーが持っていないようにすることが重要です。この操作を行うには、Accessのセキュリティ ウィザードが役に立ちます。


    参照 セキュリティウィザードの詳細については、「14.2.2 セキュリティウィザードを使用してセキュリティを設定する」を参照してください。
  • [管理者グループ] システム管理者のグループアカウントです。[管理者グループ]グループには、少なくとも1人のメンバーが所属している必要があります。ユーザーレベルのセキュリティが設定されるまで、[管理者グループ]のメンバーは既定の[管理者]ユーザーのみです。[管理者]グループのメンバーは、権限の変更、ユーザーやグループの地位の変更、ユーザーのパスワードの削除などの処理を実行できるので、ユーザーをこのグループに割り当てるときは慎重に行います。


    重要 Accessのセットアッププログラムでは、セットアップ時に入力されたユーザー名と会社名を使って、既定のワークグループ情報ファイルの[管理者グループ]にSIDが作成されます。これらの2つの値はAccessのヘルプ メニューから得ることができるので、セキュリティを破ろうとするものが、Accessワークグループ管理を使って、これらの値で新規のワークグループ管理ファイルを作成し、自分自身を[管理者グループ]に追加して同じ[管理者グループ]アカウントを再度作成することができてしまいます。


    ユーザーレベルのセキュリティを設定する前に、Accessワークグループ管理を使って、開発者のみが知る3つ目の値、ワークグループID(WID)を入力して、新規のワークグループ情報ファイルを作成します。このようにすると、新規のワークグループ情報ファイルには一意で確実なSIDを持つ新規[管理者グループ]が含まれます。

    新規ワークグループ情報ファイルの作成に使った大文字と小文字が区別された文字列はメモなどに書き留めて、安全な場所に保管してください。ワークグループ情報ファイルが紛失したり壊れた場合に、この3つの文字列を使って同じ[管理者グループ]グループが含まれるワークグループ情報ファイルを再度作成することができます。この結果、再度作成された[管理者グループ]のメンバーは、前のワークグループ情報ファイルで作成されたすべてのオブジェクトに対する権限をそのまま使うことができます。


    [管理者]グループの管理者権限、つまり権限を変更する権限は、Accessのメニュー コマンドを使って無効にできません。[ツール]メニューの[セキュリティ]をクリックして表示した[ユーザー/グループの権限]ダイアログ ボックスの[権限]タブにある[管理者]チェック ボックスをオフにしても、オブジェクトに対する[管理者グループ]グループの権限は残ります。データ アクセス オブジェクト(DAO)を使って[管理者グループ]グループの管理者権限を無効にできますが、権限を元に戻すことができなくなるだけなので、このようにしないことをお勧めします。その代わりに、ほかに同じ[管理者グループ]グループがないことを保証する確実なWIDで作成されたワークグループ情報ファイルを使って、適切なユーザーのみを[管理者グループ]グループに割り当てるようにしてください。
  • [ユーザーグループ]  すべてのユーザー アカウントを含む既定のグループ アカウントです。Accessでは、新しいユーザー アカウントを作成すると、自動的に[ユーザー グループ]グループに追加されます。[ユーザーグループ]グループに明示的に割り当てられた権限は、AccessやVisual Basicですべてのユーザーが使うことができます。これは、[管理者]ユーザーのSIDのように、[ユーザーグループ]グループのSIDがすべてのワークグループ情報ファイルで共通しているためです。既定の[管理者]ユーザーの場合と同様に、ユーザーレベルセキュリティを設定する場合は、保護するオブジェクトに対する所有権や権限を[ユーザー グループ]グループに持たせないようにすることが重要です。

権限

"明示的"権限とは、ユーザーに対して直接与えられた権限のことで、そのユーザーのみ有効です。"暗黙的"権限とは、グループに対して与えられた権限のことで、グループのメンバー全員がグループに割り当てられた権限を持ちます。


比較的簡単にワークグループを管理するには、新規グループを作成し、各ユーザーに対してではなく、グループに対して権限を割り当てます。この場合、グループからユーザーを追加または削除して、各ユーザーの権限を変更します。単純な方法では、既定のグループのみを使用して権限を定義することができます。つまり、管理者を[管理者グループ]に、その他のすべてのユーザーを[ユーザー グループ]グループに割り当てます。この場合は、[ユーザー グループ]グループがすべてのAccessで同じであり、[ユーザー グループ]グループに割り当てる権限はいずれもAccessのすべてのユーザーの権限になることに注意してください。セキュリティを強化するには、[ユーザー グループ]のすべての権限を無効にして、独自のグループを作成し、そのグループに権限を割り当てます。


ユーザーがオブジェクトに対して処理を実行しようとすると、そのユーザーのセキュリティレベルは、ユーザーに明示的に与えられた権限と、そのユーザーが所属するグループに暗黙的に与えられた権限で最も制限が少ないものになります。たとえば、ユーザー1に[受注]テーブルに対する明示的権限が何もなく、そのユーザーが所属している[社員]グループが[受注]テーブルに対して[データの読み取り]権限を持っている場合、ユーザー1はこのテーブルのデータを読み取ることができます。ユーザー1が[社員]グループから削除され、[受注]テーブルに対する権限を持っているほかのいずれのグループにも所属していない場合、ユーザー1は[受注]テーブルに対するどのようなアクセスも拒否されます。


データベースのオブジェクトに対する権限は、次のユーザーが変更されます。

  • データベースが作成されたときに使われていたワークグループ情報ファイルの[管理者グループ]グループのメンバー
  • オブジェクトの所有者
  • オブジェクトに対して管理者権限を持っているユーザー

データベース自体の権限は、データベースの所有者か[管理者グループ]グループのメンバーのみが変更できます。

ユーザーがある操作を現在実行することができなくても、その操作を実行するための権限を得ることができる場合があります。これは、ユーザーがデータベースが作成されたときのワークグループ情報ファイルの[管理者グループ]グループのメンバーか、またはオブジェクトの所有者である場合です。

新しいオブジェクトに対する権限

データベースのすべての新しいオブジェクトに対して、ユーザーやグループに与える既定の権限を設定することができます。たとえば、[ユーザー グループ]グループに新しいテーブルの権限を与えないようにすることができます。この場合、新しいオブジェクトが適切に保護されているかどうかを絶えず確認する必要がなくなるため、管理者の負担が軽くなります。


メモ Visual Basic コードを使ってContainerオブジェクトに対する権限を無効にして、ユーザーが新しいテーブルやクエリーを作成することを防止できます。ただし、ユーザーが新しいフォーム、レポート、マクロ、またはモジュールを作成することを防止できません。


参照 新しいオブジェクトに対する既定の権限を割り当てる方法については、オンライン ヘルプの[キーワード]タブで「権限の割り当てと削除」の項目を検索し、説明を参照してください。割り当てることのできる権限の種類の詳細については、オンライン ヘルプの[キーワード]タブで「権限の設定」の項目を検索し、説明を参照してください。

所有権

オブジェクトを作成したユーザーがそのオブジェクトの所有者になります。オブジェクトの所有者は、そのオブジェクトに対する所有者の明示的権限を[管理者グループ]グループのメンバーが無効にした場合でも、常にそのオブジェクトに対する権限を与えることができます。オブジェクトの所有権を変更する方法の1つとして、[ツール]メニューの[セキュリティ]をクリックして表示される[ユーザー/グループの権限]ダイアログボックスの[所有者の変更]タブを使う方法があります。しかし、グループの所有者は、[所有者の変更]タブを使って変更できません。グループは、データベース以外のすべてのオブジェクトを所有できます。


所有権を別のユーザーに変更するもう1つの方法として、そのユーザーとしてログオンして、オブジェクトを再度作成する方法があります。オブジェクトの再度作成は、最初から始める必要はありません。オブジェクトのコピーを作成するか、またはオブジェクトをほかのデータベースからインポートしたりほかのデータベースへエクスポートしたりします。オブジェクトを再度作成するためには、そのオブジェクトに対する[データの読み取り]権限が必要であり、オブジェクトがテーブルまたはクエリーである場合には[構造の読み取り]権限も必要になります。


メモ この方法では、"RunPermissions/実行権限"プロパティに[所有者]が設定されているクエリーの所有権を変更することはできません。クエリーの所有者、または"RunPermissions/実行権限"プロパティに[ユーザー]が設定されているクエリーの所有者のみを変更できます。"RunPermissions/実行権限"プロパティの詳細については、「14.2.6 "RunPermissions/実行権限"プロパティをユーザーレベル セキュリティで使用する」を参照してください。


データベースを作成したユーザーがそのデータベースの所有者になります。データベースの所有者は、いつでもデータベースを開いて、その中に新しいオブジェクトを作成できます。データベースの所有者は、データベースを開く権限を与えたり無効にできます。[ユーザー/グループの権限]ダイアログ ボックスを使って、データベースの所有者の権限を無効にすることはできません。ユーザーレベルのセキュリティを設定するまで、既定の[管理者]ユーザーがデータベースの所有者となります。


重要 データベースの所有者を安全なユーザー アカウントに変更しておかないと、AccessまたはVisual Basicのすべてのユーザーがデータベースを開くことになります。[ユーザー/グループの権限]ダイアログ ボックスの[所有者の変更]タブを使っても、データベースの所有権を変更することはできません。データベース自体も含めたすべてのオブジェクトの所有権を変更するには、目的のデータベースにユーザーとしてログオンして、新しい空のデータベースを作成して、すべてのオブジェクトをそこにインポートします。セキュリティ ウィザードを実行してデータベースを保護するときには、この方法でデータベースとすべてのオブジェクトの所有権が変更されます。




▼ページトップに戻る