

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Erstellen benutzerdefinierter IAM-Richtlinienerklärungen für den Zugriff auf Daten in Amazon Neptune
<a name="iam-data-access-policies"></a>

Neptune-Datenzugriff-Richtlinienanweisungen verwenden [Datenzugriffsaktionen](iam-dp-actions.md), [Ressourcen](iam-data-resources.md) und [Bedingungsschlüssel](iam-data-condition-keys.md#iam-neptune-condition-keys), denen jeweils das Präfix `neptune-db:` vorangestellt ist.

**Topics**
+ [Verwenden von Abfrageaktionen in Neptune-Datenzugriff-Richtlinienanweisungen](#iam-data-query-actions)
+ [IAM-Aktionen für den Datenzugriff in Amazon Neptune](iam-dp-actions.md)
+ [IAM-Ressourcentypen für den Zugriff auf Daten in Amazon Neptune](iam-data-resources.md)
+ [IAM-Bedingungsschlüssel für den Zugriff auf Daten in Amazon Neptune](iam-data-condition-keys.md)
+ [Erstellen von IAM-Datenzugriffsrichtlinien in Amazon Neptune](iam-data-access-examples.md)

## Verwenden von Abfrageaktionen in Neptune-Datenzugriff-Richtlinienanweisungen
<a name="iam-data-query-actions"></a>

Es gibt drei Neptune-Abfrageaktionen, die in Datenzugriff-Richtlinienanweisungen verwendet werden können, `ReadDataViaQuery`, `WriteDataViaQuery` und `DeleteDataViaQuery`. Eine bestimmte Abfrage benötigt möglicherweise Berechtigungen, um mehr als eine dieser Aktionen auszuführen, und es möglicherweise nicht immer offensichtlich, welche Kombination dieser Aktionen zulässig sein muss, um eine Abfrage auszuführen.

Neptune ermittelt vor der Ausführung einer Abfrage die Berechtigungen, die für die Ausführung der einzelnen Schritte der Abfrage erforderlich sind, und kombiniert diese zu einem vollständigen Satz der Berechtigungen, die für die Abfrage erforderlich sind. Beachten Sie, dass dieser vollständige Satz von Berechtigungen alle Aktionen enthält, die die Abfrage *möglicherweise* ausführt. Dabei handelt es sich nicht notwendigerweise um den Satz von Aktionen, den die Abfrage tatsächlich für Ihre Daten ausführt.

Das bedeutet, dass Sie Berechtigungen für alle Aktionen bereitstellen müssen, die die Abfrage möglicherweise ausführt, um die Ausführung einer bestimmten Abfrage zu ermöglichen, unabhängig davon, ob die Abfrage diese Aktionen tatsächlich ausführt oder nicht.

Dies sind einige Beispiele für Gremlin-Abfragen, die dies im Detail zeigen:
+ 

  ```
  g.V().count()
  ```

  `g.V()` und `count()` benötigen lediglich Lesezugriff, sodass die Abfrage insgesamt lediglich einen `ReadDataViaQuery`-Zugriff benötigt.
+ 

  ```
  g.addV()
  ```

  `addV()` muss überprüfen, ob ein Eckpunkt mit einer bestimmten ID vorhanden ist oder nicht, bevor ein neuer Eckpunkt eingefügt wird. Das bedeutet, dass die Abfrage einen `ReadDataViaQuery`- und einen `WriteDataViaQuery`-Zugriff benötigt.
+ 

  ```
  g.V('1').as('a').out('created').addE('createdBy').to('a')
  ```

  `g.V('1').as('a')` und `out('created')` benötigen lediglich Lesezugriff. `addE().from('a')` benötigt jedoch sowohl Lese- als auch Schreibzugriff, da `addE()` die Eckpunkte `to` und `from` lesen muss und prüfen muss, ob bereits eine Kante mit derselben ID vorhanden ist, bevor eine neue Kante hinzugefügt wird. Die Abfrage benötigt daher insgesamt einen `ReadDataViaQuery`- und einen `WriteDataViaQuery`-Zugriff.
+ 

  ```
  g.V().drop()
  ```

  `g.V()` benötigt lediglich Lesezugriff. `drop()` benötigt einen Lese- und Löschzugriff, da Eckpunkte oder Kanten vor dem Löschen gelesen werden müssen. Daher benötigt die Abfrage insgesamt einen `ReadDataViaQuery`- und einen `DeleteDataViaQuery`-Zugriff.
+ 

  ```
  g.V('1').property(single, 'key1', 'value1')
  ```

  `g.V('1')` benötigt lediglich Lesezugriff. `property(single, 'key1', 'value1')` benötigt jedoch einen Lese-, Schreib- und Löschzugriff. Hier werden im Schritt `property()` Schlüssel und Wert eingefügt, falls noch nicht im Eckpunkt vorhanden. Falls jedoch bereits vorhanden, wird der vorhandene Eigenschaftswert gelöscht und es wird ein neuer Wert eingefügt. Daher benötigt die Abfrage insgesamt einen `ReadDataViaQuery`-, `WriteDataViaQuery`- und `DeleteDataViaQuery`-Zugriff.

  Jede Abfrage, die den Schritt `property()` enthält, benötigt `ReadDataViaQuery`-, `WriteDataViaQuery`- und `DeleteDataViaQuery`-Berechtigungen.

Dies sind einige openCypher-Beispiele:
+ 

  ```
  MATCH (n)
  RETURN n
  ```

  Diese Abfrage liest alle Knoten in der Datenbank und gibt sie zurück. Hierfür wird lediglich ein `ReadDataViaQuery`-Zugriff benötigt.
+ 

  ```
  MATCH (n:Person)
  SET n.dept = 'AWS'
  ```

  Diese Abfrage benötigt einen `ReadDataViaQuery`-, `WriteDataViaQuery`- und `DeleteDataViaQuery`-Zugriff. Sie liest alle Knoten mit der Bezeichnung 'Person' und fügt ihnen entweder eine neue Eigenschaft mit dem Schlüssel `dept` und dem Wert `AWS` hinzu oder (wenn die Eigenschaft `dept` bereits vorhanden ist) löscht den alten Wert und fügt stattdessen `AWS` ein. Wenn der festzulegende Wert `null` ist, löscht `SET` die Eigenschaft vollständig.

   Da die `SET`-Klausel in einigen Fällen möglicherweise einen vorhandenen Wert löschen muss, benötigt sie **stets** `DeleteDataViaQuery`-, `ReadDataViaQuery`- und `WriteDataViaQuery`-Berechtigungen.
+ 

  ```
  MATCH (n:Person)
  DETACH DELETE n
  ```

  Diese Abfrage benötigt `ReadDataViaQuery`- und `DeleteDataViaQuery`-Berechtigungen. Sie sucht alle Knoten mit der Bezeichnung `Person` und löscht sie zusammen mit den Kanten, die mit diesen Knoten verbunden sind, und allen zugehörigen Bezeichnungen und Eigenschaften.
+ 

  ```
  MERGE (n:Person {name: 'John'})-[:knows]->(:Person {name: 'Peter'})
  RETURN n
  ```

  Diese Abfrage benötigt `ReadDataViaQuery`- und `WriteDataViaQuery`-Berechtigungen. Die `MERGE`-Klausel stimmt entweder mit einem angegebenen Muster überein oder erstellt es. Da ein Schreibvorgang erfolgen kann, wenn das Muster nicht übereinstimmt, sind Schreib- und Leseberechtigungen erforderlich.