メインコンテンツまでスキップ

3. 手順要素

このセクションでは、ビューベースアクセス制御モデルを実装するアクセス制御モジュールが、アプリケーション(たとえば、コマンドレスポンダアプリケーションまたは通知発信者アプリケーション)からサービス要求を受信したときに従う手順について説明します。

3.1. isAccessAllowedプロセスの概要

ビューベースアクセス制御モデルは、isAccessAllowedサービスプリミティブを提供します。これは、特定の管理オブジェクトインスタンスに対する特定の操作のアクセスが許可されているかどうかを判断する必要がある場合に、アプリケーションが使用します。

isAccessAllowedサービスプリミティブへの入力は次のとおりです:

  • securityModel - 使用中のセキュリティモデル
  • securityName - アクセス権がチェックされているプリンシパル
  • securityLevel - セキュリティレベル
  • viewType - 要求されているアクセスのタイプ(読み取り、書き込み、または通知)
  • contextName - オブジェクトインスタンスを含むコンテキスト
  • variableName - アクセスされているオブジェクトインスタンス

isAccessAllowedサービスプリミティブの出力は次のとおりです:

  • errorIndication - 成功または失敗の指示

サービスプリミティブは、入力値を使用してアクセスが許可されているかどうかを判断します。判断は次の方法で行われます:

  1. securityModelとsecurityNameを使用して、vacmSecurityToGroupTableからgroupNameを決定します。

  2. 決定されたgroupName、入力されたsecurityModel、入力されたsecurityLevel、入力されたcontextName、およびvacmAccessTableからの情報を使用して、要求されたviewType(読み取り、書き込み、または通知)に使用されるMIBビュー(viewNameによって識別)を決定します。

  3. 決定されたviewNameと入力されたvariableNameを使用して、vacmViewTreeFamilyTableを介して、variableNameがviewNameによって識別されるMIBビューに含まれているかどうかを判断します。

variableNameがMIBビューに含まれている場合、アクセスが許可され、サービスプリミティブは成功を返します。それ以外の場合、アクセスは許可されず、サービスプリミティブはエラー指示を返します。

3.2. isAccessAllowedサービス要求の処理

ビューベースアクセス制御モデルを実装するアクセス制御モジュールがisAccessAllowedサービス要求を受信したときに、次の手順に従います。

  1. vacmContextTableを参照して、contextNameパラメータで識別されるSNMPコンテキストに関する情報が利用可能かどうかを確認します。このSNMPコンテキストに関する情報がvacmContextTableにない場合、errorIndication(noSuchContext)が呼び出しモジュールに返されます。

  2. vacmSecurityToGroupTableを参照して、vacmSecurityModelコンポーネントがsecurityModelパラメータに等しく、vacmSecurityNameコンポーネントがsecurityNameパラメータに等しいエントリを検索します。一致するエントリが見つからない場合、またはvacmGroupNameの値が空の文字列である場合、errorIndication(noGroupName)が呼び出しモジュールに返されます。それ以外の場合、一致するエントリからvacmGroupNameの値をグループとして使用して処理を続けます。

  3. vacmAccessTableを参照して、vacmGroupName、vacmAccessContextPrefix、vacmAccessSecurityModel、vacmAccessSecurityLevelの値がそれぞれグループ、contextName、securityModel、securityLevelと一致するエントリを検索します。このようなエントリは0個、1個、または複数存在する可能性があります。

    contextNameとvacmAccessContextPrefixのマッチングは次のように実行されます:

    a) vacmAccessContextMatchがexactの場合、contextNameはvacmAccessContextPrefixの値と完全に一致する必要があります。

    b) vacmAccessContextMatchがprefixの場合、contextNameの最初のN文字がvacmAccessContextPrefixのN文字と一致する必要があります。ここで、NはvacmAccessContextPrefixの長さです。

    マッチングの目的で、vacmAccessSecurityModelには任意のsecurityModel値と一致するワイルドカード値(any)が含まれている場合があります。

    マッチングの目的で、vacmAccessSecurityLevelはsecurityLevel値以下である場合があります:

    noAuthNoPriv < authNoPriv < authPriv

    複数のvacmAccessEntryが一致する場合、最も長いcontextPrefixを持つエントリが選択されます。同じ最長contextPrefixを持つエントリが複数ある場合、最も高いsecurityLevelを持つエントリが選択されます。同じ最長contextPrefixと同じsecurityLevelを持つエントリが複数ある場合、vacmAccessSecurityModelの値が最も高いエントリが選択されます。それでも複数の一致するエントリがある場合は、辞書式に最小のエントリが選択されます。

    一致するエントリがない場合、errorIndication(noAccessEntry)が呼び出しモジュールに返されます。

  4. viewTypeの値に応じて、vacmAccessReadViewName、vacmAccessWriteViewName、またはvacmAccessNotifyViewNameのいずれかがviewNameとして選択されます。選択されたviewNameが空の文字列である場合、errorIndication(noSuchView)が呼び出しモジュールに返されます。

  5. vacmViewTreeFamilyTableを参照して、variableNameが選択されたviewNameで識別されるMIBビューに含まれているかどうかを確認します。これは次のように行われます:

    a) vacmViewTreeFamilyViewNameが選択されたviewNameに等しいvacmViewTreeFamilyTableの各アクティブな行について、variableNameがその行で定義されたviewTreeFamilyのメンバーであるかどうかを判断します。これは、セクション2.4.2で定義された手順に従って行われます。

    b) variableNameがvacmViewTreeFamilyTypeがexcluded(2)であるviewTreeFamilyのメンバーである場合、variableNameはMIBビューに含まれておらず、errorIndication(notInView)が呼び出しモジュールに返されます。

    c) variableNameがvacmViewTreeFamilyTypeがincluded(1)であるviewTreeFamilyのメンバーである場合、variableNameはMIBビューに含まれており、サービスプリミティブは呼び出しモジュールに成功を返します。

    d) variableNameが選択されたviewNameのどのviewTreeFamilyのメンバーでもない場合、それはMIBビューに含まれておらず、errorIndication(notInView)が呼び出しモジュールに返されます。