ユーザーにテーブルに対する[データの読み取り]権限があるかどうかを確認する方法

◆概要
 この資料は、Microsoft Accessでユーザーにテーブルに対する[データの読み取り]権限があるかどうかを確認する方法について記載しています。


 AllPermissionsプロパティは、各ユーザーアカウントに直接に割り当てられる明示的権限に加えて、ユーザーが所属する各グループから継承する権限のセット(ユーザーの暗黙的権限)も返します。ユーザーのセキュリティ レベルは、常にそのユーザーの明示的権限と暗黙的な権限の中で最も制約の少ないも荷になります。


 次の関数では、AllPermissionsプロパティとdbSecRetrieveData定数を使って、指定されたユーザーに特定のテーブルに対する[データの読み取り]権限がるかどうかを確認します。

Function checkAllReadPerms()
    ' AllPermissions プロパティとdbSecRetrieveData定数を使って、
    ' 指定されたユーザーに特定のテーブルに対する[データの読み取り]
    ' 権限があるかどうかを確認します。
    Dim dbs As DATABASE, docTemp As Document, strUser As String, _
        strObject As String
        
    ' カレントデータベースを Database 型の変数に代入します。
    Set dbs = CurrentDb
    
    ' ユーザー名とテーブル名を入力するように要求し、それらを文字列変数に代入します。
    strUser = InputBox("ユーザーのアカウント名を入力してください。", _
        "ユーザー名を入力する")
    strObject = InputBox _
        ("[データの読み取り]権限を確認するためのテーブル名を入力してください。", _
            "テーブル名を入力する")
    
    ' Document 変数に指定されたテーブルを設定してから、
    ' そのテーブルのユーザーを指定します。
    Set docTemp = dbs.Containers!Tables.Documents(strObject)
    docTemp.UserName = strUser
    
    ' ユーザーに暗黙または明示のどちらの[データの読み取り]権限があるかを確認します。
    If (docTemp.AllPermissions And dbSecRetrieveData) > 0 Then
        MSGBOX strUser & "には" & strObject & _
            "に対する暗黙または明示的[データの読み取り]権限があります。"
    Else
        MSGBOX strUser & "には" & strObject & "に対する権限があります。"
    End If
    
End Function

 ユーザーに与えられた明示的権限のみを確認する場合は、代わりにPermissionsプロパティを使うこともできます。


 セキュリティ ウィザードを使って[管理者グループ]グループ以外のすべてのユーザーおよびグループの権限を無効にすると、ユーザーの明示的権限がより制約の少ないものなのかどうかを確認する必要がなくなります。次に、新しいグループを作成し、個々のユーザーではなくグループにのみ権限を割り当てます。このようにすると、ユーザーを新しいグループに移すだけで、ユーザーの権限を簡単に変更できます。また、1回の操作でグループ全体の権限を変更できるので、ユーザーごとに変更する場合よりも簡単です。


▼ページトップに戻る