Passa al contenuto principale

3. Elementi di procedura

Questa sezione descrive le procedure seguite da un modulo di controllo degli accessi che implementa il modello di controllo degli accessi basato su viste quando riceve una richiesta di servizio da un'applicazione (ad esempio, un'applicazione Command Responder o un'applicazione Notification Originator).

3.1. Panoramica del processo isAccessAllowed

Il modello di controllo degli accessi basato su viste fornisce una primitiva di servizio, isAccessAllowed, che viene utilizzata da un'applicazione quando deve determinare se l'accesso è consentito per una particolare operazione su una particolare istanza di oggetto gestito.

Gli input della primitiva di servizio isAccessAllowed sono:

  • securityModel - il modello di sicurezza in uso
  • securityName - il principale i cui diritti di accesso vengono verificati
  • securityLevel - il livello di sicurezza
  • viewType - il tipo di accesso richiesto (lettura, scrittura o notifica)
  • contextName - il contesto contenente l'istanza di oggetto
  • variableName - l'istanza di oggetto a cui si accede

L'output della primitiva di servizio isAccessAllowed è:

  • errorIndication - indicazione di successo o fallimento

La primitiva di servizio utilizza i valori di input per determinare se l'accesso è consentito. La determinazione viene effettuata:

  1. Utilizzando il securityModel e il securityName per determinare il groupName dalla vacmSecurityToGroupTable.

  2. Utilizzando il groupName determinato, il securityModel inserito, il securityLevel inserito, il contextName inserito e le informazioni dalla vacmAccessTable per determinare la vista MIB (identificata da viewName) da utilizzare per il viewType richiesto (lettura, scrittura o notifica).

  3. Utilizzando il viewName determinato e il variableName inserito per determinare, tramite la vacmViewTreeFamilyTable, se il variableName è incluso nella vista MIB identificata dal viewName.

Se il variableName è incluso nella vista MIB, allora l'accesso è consentito e la primitiva di servizio restituisce successo. Altrimenti, l'accesso non è consentito e la primitiva di servizio restituisce un'indicazione di errore.

3.2. Elaborazione della richiesta di servizio isAccessAllowed

La seguente procedura viene seguita da un modulo di controllo degli accessi che implementa il modello di controllo degli accessi basato su viste quando riceve una richiesta di servizio isAccessAllowed.

  1. La vacmContextTable viene consultata per vedere se sono disponibili informazioni sul contesto SNMP identificato dal parametro contextName. Se le informazioni su questo contesto SNMP sono assenti dalla vacmContextTable, allora viene restituita un'errorIndication (noSuchContext) al modulo chiamante.

  2. La vacmSecurityToGroupTable viene consultata per una voce il cui componente vacmSecurityModel è uguale al parametro securityModel e il cui componente vacmSecurityName è uguale al parametro securityName. Se non viene trovata una voce corrispondente, o se il valore di vacmGroupName è la stringa vuota, allora viene restituita un'errorIndication (noGroupName) al modulo chiamante. Altrimenti, l'elaborazione continua utilizzando il valore di vacmGroupName dalla voce corrispondente come gruppo.

  3. La vacmAccessTable viene consultata per voci i cui valori di vacmGroupName, vacmAccessContextPrefix, vacmAccessSecurityModel e vacmAccessSecurityLevel corrispondono rispettivamente a gruppo, contextName, securityModel e securityLevel. Possono esserci zero, una o più di tali voci.

    La corrispondenza del contextName con il vacmAccessContextPrefix viene eseguita come segue:

    a) Se vacmAccessContextMatch è exact, allora il contextName deve corrispondere esattamente al valore di vacmAccessContextPrefix.

    b) Se vacmAccessContextMatch è prefix, allora i primi N caratteri di contextName devono corrispondere agli N caratteri di vacmAccessContextPrefix, dove N è la lunghezza di vacmAccessContextPrefix.

    Ai fini della corrispondenza, vacmAccessSecurityModel può contenere un valore jolly (any) che corrisponde a qualsiasi valore securityModel.

    Ai fini della corrispondenza, vacmAccessSecurityLevel può essere uguale o inferiore al valore securityLevel, dove:

    noAuthNoPriv < authNoPriv < authPriv

    Se più di un vacmAccessEntry corrisponde, viene selezionata la voce con il contextPrefix più lungo. Se ci sono più voci con lo stesso contextPrefix più lungo, viene selezionata la voce con il securityLevel più alto. Se ci sono più voci con lo stesso contextPrefix più lungo e lo stesso securityLevel, viene selezionata la voce con il valore più alto di vacmAccessSecurityModel. Nel caso improbabile che ci siano ancora più voci corrispondenti, viene selezionata la voce lessicograficamente più piccola.

    Se non ci sono voci corrispondenti, viene restituita un'errorIndication (noAccessEntry) al modulo chiamante.

  4. A seconda del valore di viewType, viene selezionato vacmAccessReadViewName, vacmAccessWriteViewName o vacmAccessNotifyViewName come viewName. Se il viewName selezionato è la stringa vuota, viene restituita un'errorIndication (noSuchView) al modulo chiamante.

  5. La vacmViewTreeFamilyTable viene consultata per vedere se il variableName è incluso nella vista MIB identificata dal viewName selezionato. Questo viene fatto come segue:

    a) Per ogni riga attiva nella vacmViewTreeFamilyTable il cui vacmViewTreeFamilyViewName è uguale al viewName selezionato, determinare se il variableName è un membro della viewTreeFamily definita dalla riga. Questo viene fatto secondo la procedura definita nella sezione 2.4.2.

    b) Se il variableName è un membro di una viewTreeFamily il cui vacmViewTreeFamilyType è excluded(2), allora il variableName non è nella vista MIB, e viene restituita un'errorIndication (notInView) al modulo chiamante.

    c) Se il variableName è un membro di una viewTreeFamily il cui vacmViewTreeFamilyType è included(1), allora il variableName è nella vista MIB, e la primitiva di servizio restituisce successo al modulo chiamante.

    d) Se il variableName non è un membro di alcuna viewTreeFamily per il viewName selezionato, allora non è nella vista MIB, e viene restituita un'errorIndication (notInView) al modulo chiamante.