3. Éléments de procédure
Cette section décrit les procédures suivies par un module de contrôle d'accès qui implémente le modèle de contrôle d'accès basé sur les vues lorsqu'il reçoit une demande de service d'une application (par exemple, une application Command Responder ou une application Notification Originator).
3.1. Aperçu du processus isAccessAllowed
Le modèle de contrôle d'accès basé sur les vues fournit une primitive de service, isAccessAllowed, qui est utilisée par une application lorsqu'elle doit déterminer si l'accès est autorisé pour une opération particulière sur une instance d'objet géré particulière.
Les entrées de la primitive de service isAccessAllowed sont :
- securityModel - le modèle de sécurité en cours d'utilisation
- securityName - le principal dont les droits d'accès sont vérifiés
- securityLevel - le niveau de sécurité
- viewType - le type d'accès demandé (lecture, écriture ou notification)
- contextName - le contexte contenant l'instance d'objet
- variableName - l'instance d'objet accédée
La sortie de la primitive de service isAccessAllowed est :
- errorIndication - indication de succès ou d'échec
La primitive de service utilise les valeurs d'entrée pour déterminer si l'accès est autorisé. La détermination se fait par :
-
Utilisation du securityModel et du securityName pour déterminer le groupName à partir de la vacmSecurityToGroupTable.
-
Utilisation du groupName déterminé, du securityModel saisi, du securityLevel saisi, du contextName saisi et des informations de la vacmAccessTable pour déterminer la vue MIB (identifiée par viewName) à utiliser pour le viewType demandé (lecture, écriture ou notification).
-
Utilisation du viewName déterminé et du variableName saisi pour déterminer, via la vacmViewTreeFamilyTable, si le variableName est inclus dans la vue MIB identifiée par le viewName.
Si le variableName est inclus dans la vue MIB, alors l'accès est autorisé et la primitive de service retourne le succès. Sinon, l'accès n'est pas autorisé et la primitive de service retourne une indication d'erreur.
3.2. Traitement de la demande de service isAccessAllowed
La procédure suivante est suivie par un module de contrôle d'accès qui implémente le modèle de contrôle d'accès basé sur les vues lorsqu'il reçoit une demande de service isAccessAllowed.
-
La vacmContextTable est consultée pour voir si des informations sur le contexte SNMP identifié par le paramètre contextName sont disponibles. Si des informations sur ce contexte SNMP sont absentes de la vacmContextTable, alors une errorIndication (noSuchContext) est retournée au module appelant.
-
La vacmSecurityToGroupTable est consultée pour une entrée dont le composant vacmSecurityModel est égal au paramètre securityModel et dont le composant vacmSecurityName est égal au paramètre securityName. Si une entrée correspondante n'est pas trouvée, ou si la valeur de vacmGroupName est la chaîne vide, alors une errorIndication (noGroupName) est retournée au module appelant. Sinon, le traitement continue en utilisant la valeur de vacmGroupName de l'entrée correspondante comme groupe.
-
La vacmAccessTable est consultée pour des entrées dont les valeurs de vacmGroupName, vacmAccessContextPrefix, vacmAccessSecurityModel et vacmAccessSecurityLevel correspondent respectivement au groupe, contextName, securityModel et securityLevel. Il peut y avoir zéro, une ou plusieurs de ces entrées.
La correspondance du contextName avec le vacmAccessContextPrefix est effectuée comme suit :
a) Si vacmAccessContextMatch est exact, alors le contextName doit correspondre exactement à la valeur de vacmAccessContextPrefix.
b) Si vacmAccessContextMatch est prefix, alors les N premiers caractères de contextName doivent correspondre aux N caractères de vacmAccessContextPrefix, où N est la longueur de vacmAccessContextPrefix.
Aux fins de correspondance, vacmAccessSecurityModel peut contenir une valeur joker (any) qui correspond à n'importe quelle valeur securityModel.
Aux fins de correspondance, vacmAccessSecurityLevel peut être égal ou inférieur à la valeur securityLevel, où :
noAuthNoPriv < authNoPriv < authPrivSi plus d'un vacmAccessEntry correspond, l'entrée avec le contextPrefix le plus long est sélectionnée. S'il y a plusieurs entrées avec le même contextPrefix le plus long, l'entrée avec le securityLevel le plus élevé est sélectionnée. S'il y a plusieurs entrées avec le même contextPrefix le plus long et le même securityLevel, l'entrée avec la valeur la plus élevée de vacmAccessSecurityModel est sélectionnée. Dans le cas improbable où il reste encore plusieurs entrées correspondantes, l'entrée lexicographiquement la plus petite est sélectionnée.
S'il n'y a pas d'entrées correspondantes, une errorIndication (noAccessEntry) est retournée au module appelant.
-
En fonction de la valeur de viewType, soit le vacmAccessReadViewName, soit le vacmAccessWriteViewName, soit le vacmAccessNotifyViewName est sélectionné comme viewName. Si le viewName sélectionné est la chaîne vide, une errorIndication (noSuchView) est retournée au module appelant.
-
La vacmViewTreeFamilyTable est consultée pour voir si le variableName est inclus dans la vue MIB identifiée par le viewName sélectionné. Cela se fait comme suit :
a) Pour chaque ligne active dans la vacmViewTreeFamilyTable dont le vacmViewTreeFamilyViewName est égal au viewName sélectionné, déterminer si le variableName est un membre de la viewTreeFamily définie par la ligne. Cela se fait selon la procédure définie dans la section 2.4.2.
b) Si le variableName est un membre d'une viewTreeFamily dont le vacmViewTreeFamilyType est excluded(2), alors le variableName n'est pas dans la vue MIB, et une errorIndication (notInView) est retournée au module appelant.
c) Si le variableName est un membre d'une viewTreeFamily dont le vacmViewTreeFamilyType est included(1), alors le variableName est dans la vue MIB, et la primitive de service retourne le succès au module appelant.
d) Si le variableName n'est un membre d'aucune viewTreeFamily pour le viewName sélectionné, alors il n'est pas dans la vue MIB, et une errorIndication (notInView) est retournée au module appelant.