Indeling en syntaxis van voorwaarden voor Azure-roltoewijzing

Een voorwaarde is een extra controle die u desgewenst aan uw roltoewijzing kunt toevoegen voor geavanceerder toegangsbeheer. U kunt bijvoorbeeld een voorwaarde toevoegen waarvoor een object een specifieke tag moet hebben om het object te lezen. In dit artikel worden de indeling en syntaxis van voorwaarden voor roltoewijzing beschreven.

Opmaak van voorwaarde

Om beter inzicht te krijgen in de voorwaarden voor roltoewijzing, helpt het om de indeling te bekijken.

Eenvoudige voorwaarde

De meest elementaire voorwaarde bestaat uit een gerichte actie en een expressie. Een actie is een bewerking die een gebruiker op een resourcetype kan uitvoeren. Een expressie is een instructie die waar of onwaar evalueert, waarmee wordt bepaald of de actie mag worden uitgevoerd.

Hieronder ziet u de indeling van een eenvoudige voorwaarde.

Opmaak van een eenvoudige voorwaarde met één actie en één expressie.

(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
    )
)

De volgende voorwaarde heeft een actie van 'Een blob lezen'. De expressie controleert of de containernaam blobs-example-container is.

(
    (
        !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
    )
    OR 
    (
        @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name]
        StringEquals 'blobs-example-container'
    )
)

Diagram met leestoegang tot blobs met een bepaalde containernaam.

Hoe een voorwaarde wordt geëvalueerd

Als een gebruiker probeert een actie uit te voeren in de roltoewijzing die dat niet <action>is, !(ActionMatches) resulteert dit in waar en resulteert de algehele voorwaarde in waar, zodat de actie kan worden uitgevoerd.

Als een gebruiker probeert uit te voeren <action> in de roltoewijzing, !(ActionMatches) resulteert dit in onwaar, zodat de expressie wordt geëvalueerd. Als de expressie waar oplevert, resulteert de algehele voorwaarde in waar om toe te staan <action> dat deze kan worden uitgevoerd. <action> Anders mag dit niet worden uitgevoerd.

In de volgende pseudocode ziet u een andere manier waarop u deze voorwaarde kunt lezen.

if a user tries to perform an action in the role assignment that does not match <action>
{
    Allow action to be performed
}
else
{
    if <attribute> <operator> <value> is true
    {
        Allow <action> to be performed
    }
    else
    {
        Do not allow <action> to be performed
    }
}

Suboperations

Sommige acties hebben suboperaties. De gegevensactie bevat bijvoorbeeld Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read de suboperation 'Lijst-blobs'. Voorwaarden met suboperations hebben de volgende indeling.

Opmaak voor een actie met een suboperation.

(
    (
        !(ActionMatches{'<action>'}
        AND
        SubOperationMatches{'<subOperation>'})

    )
    OR
    (
        <attribute> <operator> <value>
    )
)

Meerdere acties

Een voorwaarde kan meerdere acties bevatten die u wilt toestaan als de voorwaarde waar is. Als u meerdere acties voor één voorwaarde selecteert, zijn er mogelijk minder kenmerken waaruit u kunt kiezen voor uw voorwaarde, omdat de kenmerken beschikbaar moeten zijn voor de geselecteerde acties.

Opmaak voor meerdere acties om toe te staan of de voorwaarde waar is.

(
    (
        !(ActionMatches{'<action>'})
        AND
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
    )
)

Meerdere expressies

Een voorwaarde kan meerdere expressies bevatten. Afhankelijk van de operator kunnen kenmerken worden gecontroleerd op meerdere waarden.

Opmaak voor meerdere expressies met booleaanse operatoren en meerdere waarden.

(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
        AND | OR
        <attribute> <operator> {<value>, <value>, <value>}
        AND | OR
        <attribute> <operator> <value>
    )
)

Meerdere voorwaarden

U kunt voorwaarden ook combineren om meerdere acties te richten.

Notatie voor meerdere voorwaarden met behulp van booleaanse operator.

(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
        AND | OR
        <attribute> <operator> {<value>, <value>, <value>}
        AND | OR
        <attribute> <operator> <value>
    )
)
AND
(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
        AND | OR
        <attribute> <operator> <value>
    )
)

Voorwaardesyntaxis

Hieronder ziet u de syntaxis voor een roltoewijzingsvoorwaarde.

(
    (
        !(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
        AND
        !(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
        AND
        ...
    )
    OR
    (
        <attribute> <operator> {<value, <value>, ...}
        AND | OR
        <attribute> <operator> {<value>, <value>, ...}
        AND | OR
        ...
    )
)
AND
(
    (
        !(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
        AND
        !(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
        AND
        ...
    )
    OR
    (
        <attribute> <operator> {<value, <value>, ...}
        AND | OR
        <attribute> <operator> {<value>, <value>, ...}
        AND | OR
        ...
    )
)
AND
...

Acties

Op dit moment kunnen voorwaarden worden toegevoegd aan ingebouwde of aangepaste roltoewijzingen met blobopslag- of wachtrijopslaggegevensacties. Deze omvatten de volgende ingebouwde rollen:

Zie voor een lijst met de opslagacties die u in voorwaarden kunt gebruiken:

Kenmerken

Afhankelijk van de geselecteerde acties kan het kenmerk op verschillende plaatsen worden gevonden. Als u meerdere acties voor één voorwaarde selecteert, zijn er mogelijk minder kenmerken waaruit u kunt kiezen voor uw voorwaarde, omdat de kenmerken beschikbaar moeten zijn voor alle geselecteerde acties. Als u een kenmerk wilt opgeven, moet u de bron als voorvoegsel opnemen.

Kenmerkbron Beschrijving Code
Omgeving Het kenmerk is gekoppeld aan de omgeving van de aanvraag, zoals de netwerkoorsprong van de aanvraag of de huidige datum en tijd.
@Environment
Belangrijkste Kenmerk is een aangepast beveiligingskenmerk dat is toegewezen aan de principal, zoals een gebruiker of bedrijfstoepassing (service-principal). @Principal
Aanvragen Het kenmerk maakt deel uit van de actieaanvraag, zoals het instellen van de blob-indextag. @Request
Resource Kenmerk is een eigenschap van de resource, zoals een containernaam. @Resource

Zie voor een volledige lijst met de opslagkenmerken die u in voorwaarden kunt gebruiken:

Omgevingskenmerken

Omgevingskenmerken zijn gekoppeld aan de omstandigheden waaronder de toegangsaanvraag wordt gedaan, zoals de datum en tijd van de dag of de netwerkomgeving. De netwerkomgeving kan zijn of de toegang zich via een specifiek privé-eindpunt of een subnet van een virtueel netwerk bevindt, of misschien via een privékoppeling.

De volgende tabel bevat de ondersteunde omgevingskenmerken voor voorwaarden.

Display name Beschrijving Kenmerk Type
Is private link1 Gebruik dit kenmerk in voorwaarden om toegang te vereisen via een privékoppeling. isPrivateLink Booleaanse waarde
Privé-eindpunt1,2 Gebruik dit kenmerk in voorwaarden om de toegang te beperken tot een specifiek privé-eindpunt. Microsoft.Network/privateEndpoints Tekenreeks
Subnet1,3 Gebruik dit kenmerk in voorwaarden om de toegang van een specifiek subnet te beperken. Microsoft.Network/virtualNetworks/subnets Tekenreeks
UTC nu Gebruik dit kenmerk in voorwaarden om de toegang tot objecten tijdens specifieke perioden te beperken. UtcNow Datum/tijd

1 Voor kopieerbewerkingen zijn de Is private link, Private endpointen Subnet kenmerken alleen van toepassing op de bestemming, zoals een opslagaccount, niet de bron. Voor meer informatie over de kopieerbewerkingen waarvoor dit van toepassing is, selecteert u elk kenmerk in de tabel voor meer informatie.
2 U kunt het Private endpoint kenmerk alleen gebruiken als u momenteel ten minste één privé-eindpunt hebt geconfigureerd in uw abonnement.
3 U kunt het Subnet kenmerk alleen gebruiken als u momenteel ten minste één subnet voor een virtueel netwerk hebt met behulp van service-eindpunten die zijn geconfigureerd in uw abonnement.

Principal-kenmerken

Principal-kenmerken zijn aangepaste beveiligingskenmerken die zijn toegewezen aan de beveiligingsprincipaal die toegang tot een resource aanvraagt. De beveiligingsprincipaal kan een gebruiker of een bedrijfstoepassing (service-principal) zijn.

Als u principal-kenmerken wilt gebruiken, moet u het volgende hebben:

Zie voor meer informatie over aangepaste beveiligingskenmerken:

Kenmerken aanvragen

Aanvraagkenmerken zijn gekoppeld aan de criteria die zijn opgegeven in een toegangsaanvraag, zoals het opgegeven voorvoegsel van blobs die moeten worden weergegeven.

Resourcekenmerken

Resourcekenmerken zijn gekoppeld aan het object waaraan toegang wordt aangevraagd, zoals de naam van het opslagaccount, de containernaam of de hiërarchische naamruimte die is ingeschakeld voor het opslagaccount.

Functieoperators

In deze sectie worden de functieoperators weergegeven die beschikbaar zijn om voorwaarden samen te stellen.

ActionMatches

Eigenschappen Weergegeven als
Operator ActionMatches
Beschrijving Controleert of de huidige actie overeenkomt met het opgegeven actiepatroon.
Voorbeelden ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
Als de actie die wordt gecontroleerd gelijk is aan 'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read', dan waar

ActionMatches{'Microsoft.Authorization/roleAssignments/*'}
Als de actie die wordt gecontroleerd gelijk is aan 'Microsoft.Authorization/roleAssignments/write', dan waar

ActionMatches{'Microsoft.Authorization/roleDefinitions/*'}
Als de actie die wordt gecontroleerd gelijk is aan 'Microsoft.Authorization/roleAssignments/write', dan false

SubOperationMatches

Eigenschappen Weergegeven als
Operator SubOperationMatches
Beschrijving Controleert of de huidige suboperation overeenkomt met het opgegeven suboperation-patroon.
Voorbeelden SubOperationMatches{'Blob.List'}

Exists

Eigenschappen Weergegeven als
Operator Exists
Beschrijving Controleert of het opgegeven kenmerk bestaat.
Voorbeelden Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:snapshot]
Kenmerken ondersteunen1 Naam van versleutelingsbereik
Momentopname
Versie-id

1 De Exists operator wordt alleen ondersteund voor deze kenmerken in de opbouwfunctie voor visuele ABAC-voorwaarden in Azure Portal. U kunt de Exists operator toevoegen aan elk kenmerk met behulp van andere hulpprogramma's, zoals PowerShell, de Azure CLI, de REST API en de code-editor voor voorwaarden in Azure Portal.

Logische operators

In deze sectie worden de logische operators vermeld die beschikbaar zijn om voorwaarden samen te stellen.

And

Eigenschappen Weergegeven als
Operators AND
&&
Beschrijving En operator.
Voorbeelden !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})

Or

Eigenschappen Weergegeven als
Operators OR
||
Beschrijving Of operator.
Voorbeelden @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z' OR NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId

Not

Eigenschappen Weergegeven als
Operators NOT
!
Beschrijving Not of negation operator.
Voorbeelden NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId]

Booleaanse vergelijkingsoperatoren

In deze sectie worden de Booleaanse vergelijkingsoperatoren vermeld die beschikbaar zijn om voorwaarden te maken.

Eigenschappen Weergegeven als
Operators BoolEquals
BoolNotEquals
Beschrijving Booleaanse vergelijking.
Voorbeelden @Resource[Microsoft.Storage/storageAccounts:isHnsEnabled] BoolEquals true

Vergelijkingsoperatoren voor tekenreeksen

In deze sectie worden de operatoren voor tekenreeksvergelijking weergegeven die beschikbaar zijn om voorwaarden samen te stellen.

StringEquals

Eigenschappen Weergegeven als
Operators StringEquals
StringEqualsIgnoreCase
Beschrijving Hoofdlettergevoelige (of hoofdlettergevoelige) overeenkomst. De waarden moeten exact overeenkomen met de tekenreeks.
Voorbeelden @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'

StringNotEquals

Eigenschappen Weergegeven als
Operators StringNotEquals
StringNotEqualsIgnoreCase
Beschrijving Negatie van StringEquals (of StringEqualsIgnoreCase) operator.

StringStartsWith

Eigenschappen Weergegeven als
Operators StringStartsWith
StringStartsWithIgnoreCase
Beschrijving Hoofdlettergevoelige (of hoofdlettergevoelige) overeenkomst. De waarden beginnen met de tekenreeks.

StringNotStartsWith

Eigenschappen Weergegeven als
Operators StringNotStartsWith
StringNotStartsWithIgnoreCase
Beschrijving Negatie van StringStartsWith (of StringStartsWithIgnoreCase) operator.

StringLike

Eigenschappen Weergegeven als
Operators StringLike
StringLikeIgnoreCase
Beschrijving Hoofdlettergevoelige (of hoofdlettergevoelige) overeenkomst. De waarden kunnen een jokerteken met meerdere tekens (*) of een jokerteken () bevatten die ergens in de tekenreeks overeenkomt met een jokerteken (?). Indien nodig kunnen deze tekens worden ontsnapt door een backslash \* en \?.
Voorbeelden @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'readonly/*'

Resource[name1] StringLike 'a*c?'
Als Resource[name1] gelijk is aan 'abcd', dan waar

Resource[name1] StringLike 'A*C?'
Als Resource[naam1] gelijk is aan 'abcd', dan onwaar

Resource[name1] StringLike 'a*c'
Als Resource[naam1] gelijk is aan 'abcd', dan onwaar

StringNotLike

Eigenschappen Weergegeven als
Operators StringNotLike
StringNotLikeIgnoreCase
Beschrijving Negatie van StringLike (of StringLikeIgnoreCase) operator.

Operatoren voor numerieke vergelijking

In deze sectie worden de numerieke vergelijkingsoperatoren weergegeven die beschikbaar zijn om voorwaarden samen te stellen.

Eigenschappen Weergegeven als
Operators NumericEquals
NumericNotEquals
NumericGreaterThan
NumericGreaterThanEquals
NumericLessThan
NumericLessThanEquals
Beschrijving Nummerkoppeling. Alleen gehele getallen worden ondersteund.

Vergelijkingsoperatoren voor Datum/tijd

In deze sectie worden de vergelijkingsoperatoren voor datum/tijd weergegeven die beschikbaar zijn om voorwaarden samen te stellen.

Eigenschappen Weergegeven als
Operators DateTimeEquals
DateTimeNotEquals
DateTimeGreaterThan
DateTimeGreaterThanEquals
DateTimeLessThan
DateTimeLessThanEquals
Beschrijving Volledige precisiecontrole met de notatie: yyyy-mm-ddThh:mm:ss.mmmmmmmZ. Wordt nu gebruikt voor blobversie-id, blobmomentopname en UTC.
Voorbeelden @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z'

GUID-vergelijkingsoperatoren

In deze sectie worden de GUID-vergelijkingsoperatoren (Globally Unique Identifier) vermeld die beschikbaar zijn om voorwaarden samen te stellen.

Eigenschappen Weergegeven als
Operators GuidEquals
GuidNotEquals
Beschrijving Hoofdlettergevoelige overeenkomsten met de notatie: 00000000-0000-0000-0000-000000000000. Wordt gebruikt om een resource te identificeren, zoals principal-id of roldefinitie-id.
Voorbeelden

Vergelijkingsoperatoren tussen producten

In deze sectie worden de vergelijkingsoperatoren voor verschillende producten vermeld die beschikbaar zijn om voorwaarden samen te stellen.

ForAnyOfAnyValues

Eigenschappen Weergegeven als
Operators ForAnyOfAnyValues:StringEquals
ForAnyOfAnyValues:StringEqualsIgnoreCase
ForAnyOfAnyValues:StringNotEquals
ForAnyOfAnyValues:StringNotEqualsIgnoreCase
ForAnyOfAnyValues:StringLike
ForAnyOfAnyValues:StringLikeIgnoreCase
ForAnyOfAnyValues:StringNotLike
ForAnyOfAnyValues:StringNotLikeIgnoreCase
ForAnyOfAnyValues:NumericEquals
ForAnyOfAnyValues:NumericNotEquals
ForAnyOfAnyValues:NumericGreaterThan
ForAnyOfAnyValues:NumericGreaterThanEquals
ForAnyOfAnyValues:NumericLessThan
ForAnyOfAnyValues:NumericLessThanEquals
ForAnyOfAnyValues:GuidEquals
ForAnyOfAnyValues:GuidNotEquals
Beschrijving Als ten minste één waarde aan de linkerkant voldoet aan de vergelijking met ten minste één waarde aan de rechterkant, resulteert de expressie in waar. Heeft de indeling: ForAnyOfAnyValues:<BooleanFunction>. Ondersteunt meerdere tekenreeksen en getallen.
Voorbeelden @Resource[Microsoft.Storage/storageAccounts/encryptionScopes:name] ForAnyOfAnyValues:StringEquals {'validScope1', 'validScope2'}
Als de naam van het versleutelingsbereik gelijk is validScope1 aan of validScope2, dan waar.

{'red', 'blue'} ForAnyOfAnyValues:StringEquals {'blue', 'green'}
true

{'red', 'blue'} ForAnyOfAnyValues:StringEquals {'orange', 'green'}
false

ForAllOfAnyValues

Eigenschappen Weergegeven als
Operators ForAllOfAnyValues:StringEquals
ForAllOfAnyValues:StringEqualsIgnoreCase
ForAllOfAnyValues:StringNotEquals
ForAllOfAnyValues:StringNotEqualsIgnoreCase
ForAllOfAnyValues:StringLike
ForAllOfAnyValues:StringLikeIgnoreCase
ForAllOfAnyValues:StringNotLike
ForAllOfAnyValues:StringNotLikeIgnoreCase
ForAllOfAnyValues:NumericEquals
ForAllOfAnyValues:NumericNotEquals
ForAllOfAnyValues:NumericGreaterThan
ForAllOfAnyValues:NumericGreaterThanEquals
ForAllOfAnyValues:NumericLessThan
ForAllOfAnyValues:NumericLessThanEquals
ForAllOfAnyValues:GuidEquals
ForAllOfAnyValues:GuidNotEquals
Beschrijving Als elke waarde aan de linkerkant voldoet aan de vergelijking met ten minste één waarde aan de rechterkant, resulteert de expressie in waar. Heeft de indeling: ForAllOfAnyValues:<BooleanFunction>. Ondersteunt meerdere tekenreeksen en getallen.
Voorbeelden @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] ForAllOfAnyValues:StringEquals {'Cascade', 'Baker', 'Skagit'}

{'red', 'blue'} ForAllOfAnyValues:StringEquals {'orange', 'red', 'blue'}
true

{'red', 'blue'} ForAllOfAnyValues:StringEquals {'red', 'green'}
false

ForAnyOfAllValues

Eigenschappen Weergegeven als
Operators ForAnyOfAllValues:StringEquals
ForAnyOfAllValues:StringEqualsIgnoreCase
ForAnyOfAllValues:StringNotEquals
ForAnyOfAllValues:StringNotEqualsIgnoreCase
ForAnyOfAllValues:StringLike
ForAnyOfAllValues:StringLikeIgnoreCase
ForAnyOfAllValues:StringNotLike
ForAnyOfAllValues:StringNotLikeIgnoreCase
ForAnyOfAllValues:NumericEquals
ForAnyOfAllValues:NumericNotEquals
ForAnyOfAllValues:NumericGreaterThan
ForAnyOfAllValues:NumericGreaterThanEquals
ForAnyOfAllValues:NumericLessThan
ForAnyOfAllValues:NumericLessThanEquals
ForAnyOfAllValues:GuidEquals
ForAnyOfAllValues:GuidNotEquals
Beschrijving Als ten minste één waarde aan de linkerkant voldoet aan de vergelijking met elke waarde aan de rechterkant, resulteert de expressie in waar. Heeft de indeling: ForAnyOfAllValues:<BooleanFunction>. Ondersteunt meerdere tekenreeksen en getallen.
Voorbeelden {10, 20} ForAnyOfAllValues:NumericLessThan {15, 18}
true

ForAllOfAllValues

Eigenschappen Weergegeven als
Operators ForAllOfAllValues:StringEquals
ForAllOfAllValues:StringEqualsIgnoreCase
ForAllOfAllValues:StringNotEquals
ForAllOfAllValues:StringNotEqualsIgnoreCase
ForAllOfAllValues:StringLike
ForAllOfAllValues:StringLikeIgnoreCase
ForAllOfAllValues:StringNotLike
ForAllOfAllValues:StringNotLikeIgnoreCase
ForAllOfAllValues:NumericEquals
ForAllOfAllValues:NumericNotEquals
ForAllOfAllValues:NumericGreaterThan
ForAllOfAllValues:NumericGreaterThanEquals
ForAllOfAllValues:NumericLessThan
ForAllOfAllValues:NumericLessThanEquals
ForAllOfAllValues:GuidEquals
ForAllOfAllValues:GuidNotEquals
Beschrijving Als elke waarde aan de linkerkant voldoet aan de vergelijking met elke waarde aan de rechterkant, resulteert de expressie in waar. Heeft de indeling: ForAllOfAllValues:<BooleanFunction>. Ondersteunt meerdere tekenreeksen en getallen.
Voorbeelden {10, 20} ForAllOfAllValues:NumericLessThan {5, 15, 18}
false

{10, 20} ForAllOfAllValues:NumericLessThan {25, 30}
true

{10, 20} ForAllOfAllValues:NumericLessThan {15, 25, 30}
false

Speciale tekens

Teken Beschrijving
* Een sterretje (*) vertegenwoordigt een jokertekenovereenkomst met meerdere tekens die kan worden gebruikt met Like operators. Indien nodig kunt u een sterretje ontsnappen door een backslash \*toe te voegen.
? Een vraagteken (?) vertegenwoordigt een jokerteken dat kan worden gebruikt met Like operators. Indien nodig kunt u een vraagteken ontsnappen door een backslash \?toe te voegen.
$ Een dollarteken ($) wordt gebruikt om tagsleutels af te bakenen. Als in Azure PowerShell een tekenreeks tussen dubbele aanhalingstekens (") is opgenomen, moet u het voorvoegsel voorzien van een backtick ('). Voorbeeld: tags:Project<`$key_case_sensitive`$>.

Groepering en prioriteit

Als u drie of meer expressies hebt voor een gerichte actie met verschillende operatoren tussen de expressies, is de evaluatievolgorde niet eenduidig. U gebruikt haakjes () om expressies te groeperen en de volgorde op te geven waarin de expressies worden geëvalueerd. Expressies tussen haakjes hebben een hogere prioriteit. Als u bijvoorbeeld de volgende expressie hebt:

a AND b OR c

U moet haakjes toevoegen op een van de volgende manieren:

(a AND b) OR c
a AND (b OR c)

Volgende stappen