Über Ansichten

In diesem Thema werden Cloud Spanner-Ansichten vorgestellt und beschrieben.

Überblick

Eine Ansicht ist eine virtuelle Tabelle, die durch eine SQL-Abfrage definiert wird. Wenn Sie eine Ansicht erstellen, geben Sie die entsprechende SQL-Abfrage an. Nachdem Sie eine Ansicht erstellt haben, können Sie Abfragen ausführen, die wie eine Tabelle auf die Ansicht verweisen.

Wenn eine Abfrage ausgeführt wird, die auf eine Ansicht verweist, erstellt Spanner die virtuelle Tabelle, indem die in der Ansicht definierte Abfrage ausgeführt wird. Der Inhalt der virtuellen Tabelle wird dann von der verweisenden Abfrage verwendet.

Da die Abfrage, mit der eine Ansicht definiert wird, jedes Mal ausgeführt wird, wenn eine auf die Ansicht verweisende Abfrage ausgeführt wird, werden Ansichten manchmal als logische oder dynamische Ansichten bezeichnet, um sie von materialisierten SQL-Ansichten zu unterscheiden, in denen die Ergebnisse der Abfrage gespeichert werden, durch die die Ansicht als tatsächliche Tabelle im Datenspeicher definiert wird.

In Spanner können Sie eine Ansicht entweder als Ansicht der Rechte des Aufrufers oder als Ansicht der Rechte des Erstellers erstellen. Es gibt zwei Arten von Sicherheitsmodellen, die den Zugriff auf eine Ansicht für Nutzer steuern.

Rechte des AufrufersRechteansichten des Definierens
Beschreibung Wenn Sie eine Ansicht mit Invoker-Rechten erstellen, benötigt eine Datenbankrolle Berechtigungen für die Ansicht und alle Schemaobjekte, auf die die Ansicht verweist, um die Ansicht abzufragen. Weitere Informationen finden Sie unter Rechteansichten des Aufrufers. Wenn Sie eine Ansicht mit den Definitionsrechten erstellen, benötigt eine Datenbankrolle Berechtigungen für die Ansicht (und nur für die Ansicht), um die Ansicht abzufragen. Verwenden Sie neben der Rechteansicht des Definierens eine detaillierte Zugriffssteuerung. Andernfalls bietet die Ansicht „Rechte des Definierens“ keine zusätzliche Zugriffssteuerung. Weitere Informationen findest du unter Rechteansichten des Definierens.
Zum Erstellen der Datenansicht erforderliche Berechtigungen Zum Erstellen, Gewähren und Widerrufen des Zugriffs auf einen der Ansichtstypen ist die Berechtigung spanner.database.updateDdl auf Datenbankebene erforderlich.
Zum Abfragen der Ansicht erforderliche Berechtigungen Eine Datenbankrolle benötigt Berechtigungen für die Ansicht und alle zugrunde liegenden Schemaobjekte, um die Ansicht abzufragen. Eine Datenbankrolle benötigt Berechtigungen für die Ansicht (und nur für die Ansicht), um die Ansicht abzufragen.

Vorteile von Aufrufen

Ansichten bieten gegenüber der Einbindung von Abfragen, die sie in der Anwendungslogik definieren, mehrere Vorteile.

  • Ansichten können für Anwendungen eine logische Datenmodellierung bieten.

    Manchmal sind die für die physische Datenmodellierung in Spanner sinnvollen Entscheidungen nicht die beste Abstraktion für Anwendungen, die diese Daten lesen. Eine Ansicht kann ein alternatives Tabellenschema enthalten, das für Anwendungen besser geeignet ist.

  • In Ansichten sind Abfragedefinitionen zentralisiert, was die Wartung vereinfacht.

    Durch das Erstellen von Ansichten für häufig verwendete oder komplexe Abfragen können Sie Abfragetext aus Anwendungen ausklammern und zentralisieren. Dadurch ist es einfacher, Abfragetext über mehrere Anwendungen hinweg auf dem neuesten Stand zu halten und Abfragen können überarbeitet und optimiert werden, ohne dass sich der Anwendungscode ändern muss.

  • Ansichten bieten Stabilität über Schemaänderungen hinweg.

    Da die Abfrage, die eine Ansicht definiert, im Datenbankschema und nicht in der Anwendungslogik gespeichert wird, kann Spanner die Abfrage durch Schemaänderungen an den Objekten (Tabellen, Spalten usw.), auf die sich die Abfrage bezieht, nicht entwerten.

Gängige Anwendungsfälle

Verwenden Sie Ansichten, wenn Ihre Spanner-Datenbank Daten mit umfangreichen Berechtigungen enthält, die nicht für alle Datenbanknutzer zugänglich sein sollen, oder wenn Sie Ihre Daten kapseln möchten.

Wenn für die Ansicht keine zusätzlichen Sicherheitsfunktionen erforderlich sind und alle Aufrufer der Ansicht Zugriff auf alle Schemaobjekte haben, auf die die Ansicht verweist, erstellen Sie die Rechteansicht eines Aufrufers.

Wenn Sie eine Ansicht erstellen möchten, in der nicht alle Aufrufer Zugriff auf alle Schemaobjekte haben, auf die die Ansicht verweist, erstellen Sie die Rechteansicht eines Definierens. Die Rechtsansichten des Definierens sind besser geschützt und haben mehr Einschränkungen, da der Datenbankadministrator weniger Nutzern Berechtigungen für die Tabellen und Spalten erteilen kann, auf die in der Ansicht verwiesen wird. Die Rechteansichten des Definierens sind nützlich, wenn ein Nutzer eine Möglichkeit benötigt, sicher auf eine relevante Teilmenge einer Spanner-Datenbank zuzugreifen. Sie können beispielsweise die Ansicht „Rechte des Definierens“ für die folgenden Daten erstellen:

  • Private Kontodaten (z. B. Anwendungskunde)
  • Rollenspezifische Daten (z.B. der Personalabteilung, des Verkaufsmitarbeiters.
  • Standortspezifische Daten.

Rechte des Aufrufers

Wenn eine Ansicht über Invoker-Rechte verfügt, bedeutet dies, dass, wenn ein Nutzer, der Aufrufer, eine Abfrage für die Ansicht ausführt, Spanner die Berechtigungen des Nutzers für die Ansicht und für alle Schemaobjekte überprüft, auf die die Ansicht verweist. Der Nutzer muss Berechtigungen für alle Schemaobjekte haben, um die Ansicht abzufragen.

Rechteansichten des Definierens

Die Ansicht „Rechte des Definierens“ fügt der Ansicht zusätzliche Sicherheitsfunktionen hinzu. Er gewährt unterschiedliche Berechtigungen für die Ansicht und die zugrunde liegenden Schemaobjekte. Wie bei den Aufrufrechten müssen Nutzer Berechtigungen auf Datenbankebene haben, um die Rechteansichten des Definierens zu erstellen. Der Hauptunterschied besteht darin, dass Spanner bei Abfragen der Rechteansicht eines Definierens durch eine Datenbankrolle überprüft, ob die Rolle Zugriff auf die Ansicht selbst (und nur auf die Ansicht) hat. Daher kann der Nutzer, der die Ansicht abfragt, nicht auf alle zugrunde liegenden Schemaobjekte zugreifen können, aber trotzdem auf die Ansicht zugreifen und ihren Inhalt sehen. Die Rechteansichten des Definierens bieten Nutzern Zugriff auf aktuelle Daten, beschränkt auf die in der Ansicht definierten Zeilen.

Spanner-IAM-Berechtigungen (Identity and Access Management) werden auf Datenbankebene gewährt. Verwenden Sie zusätzlich zur Rechteansicht des Definierens eine detaillierte Zugriffssteuerung. Andernfalls bietet die Rechteansicht des Definierens keine zusätzliche Zugriffssteuerung. Wenn der Nutzer Leseberechtigungen für die Datenbank hat, hat er nämlich Leseberechtigungen für alle Schemaobjekte in der Datenbank. Nachdem Sie eine detaillierte Zugriffssteuerung für die Datenbank konfiguriert haben, können Nutzer mit der Berechtigung SELECT für die Ansicht eine detailgenaue Zugriffssteuerung und Nutzer mit Berechtigungen auf Datenbankebene für die Datenbank die Ansicht abfragen. Der Unterschied besteht darin, dass der Nutzer der detaillierten Zugriffssteuerung keine Berechtigungen für die zugrunde liegenden Objekte benötigt.

Einschränkungen von Ansichten

Ansichten haben im Vergleich zu tatsächlichen Tabellen Einschränkungen, sodass sie für bestimmte Anwendungsfälle nicht geeignet sind.

  • Aufrufe sind schreibgeschützt. Sie können nicht zum Hinzufügen, Aktualisieren oder Löschen von Daten verwendet werden.

    In DML-Anweisungen (INSERT, UPDATE, DELETE) können keine Ansichten verwendet werden.

  • Bei einer Abfrage, die eine Ansicht definiert, können keine Abfrageparameter verwendet werden.

  • Ansichten können nicht indexiert werden.

  • Bei Verweisen auf Ansichten können keine Tabellenhinweise verwendet werden.

    Die Abfrage, die eine Ansicht definiert, kann jedoch Tabellenhinweise für die Tabellen enthalten, auf die sie verweist.

  • Ansichten werden von der Read API nicht unterstützt.

  • Die Rechteansichten des Definierens werden von Spanner Data Boost nicht unterstützt.

    Das Ausführen einer Abfrage, die die Rechteansicht eines Definierens in Data Boost enthält, führt zu einem Fehler.

  • Der empfohlene Abfragemodus für den Zugriff auf die Rechteansicht eines Defenders ist der NORMAL-Modus.

    Nutzer, die keinen Zugriff auf die zugrunde liegenden Schemaobjekte der Rechteansicht eines Definierens haben, erhalten eine Fehlermeldung, wenn sie in einem anderen Abfragemodus als dem normalen Modus abfragen.

  • Nutzer können eine sorgfältig ausgearbeitete Abfrage erstellen, die dazu führt, dass Spanner einen Fehler ausgibt, in dem die Existenz von Daten angezeigt oder offengelegt wird, die in der Rechteansicht des Definierens nicht verfügbar sind.

    Angenommen, es gibt die folgende Ansicht „QualifiedStudentScores“, die die Punktzahlen von Studenten zurückgibt, die sich für einen Kurs qualifizieren. Die Qualifikationskriterien richten sich nach dem Niveau und dem Prüfungsergebnis des Schülers oder Studenten. Wenn der Prüfungsteilnehmer mindestens sechs erreicht hat, kommt es auf die Punktzahl an. Der Teilnehmer muss in der Prüfung mindestens 50 Punkte erreichen, um sich zu qualifizieren. Andernfalls wird der Student bei einer Stufe gleich oder größer als sechs standardmäßig qualifiziert.

      CREATE VIEW QualifiedStudentScores
      SQL SECURITY DEFINER AS
      SELECT
        s.Name,
        s.Level,
        sc.Score
      FROM Students AS s
      JOIN Scores AS sc ON sc.StudentId = s.StudentId
      WHERE
      (CASE
        WHEN (s.Level < 6) OR (s.Level >= 6 AND sc.Score >= 50)
          THEN 'QUALIFIED';
        ELSE 'FAILED';
      END) = 'QUALIFIED';
    

    Ein Nutzer kann eine Abfrage in der Form SELECT * FROM QualifiedStudentScores s WHERE s.Level = 7 AND 1/(s.Score - 20) = 1; ausführen. Diese Abfrage kann mit einem Fehler der Division durch null fehlschlagen, wenn es einen Schüler der Stufe 7 gibt, der eine Punktzahl von 20 Punkten erzielt hat, auch wenn die Ansicht die Daten für dieses Niveau auf 50 und mehr begrenzt.

Abfrageleistung bei der Verwendung von Ansichten

Die Leistung einer Abfrage, die auf eine Ansicht verweist, ist vergleichbar mit derselben Abfrage, wenn deren Ansichtsverweis durch die Ansichtsdefinition ersetzt wird.

Kontingente und Limits für Ansichten

  • Auf der Seite Kontingente und Limits finden Sie Informationen zu Kontingenten und Limits speziell für Ansichten.

  • Die Verwendung einer Ansicht in einer Abfrage kann die Konformität der Abfrage mit Abfragelimits beeinträchtigen, da die Definition der Ansicht Teil der Abfrage wird.

Auswirkungen auf die Kosten

Die Verwendung von Ansichten hat einen sehr geringen Einfluss auf die Kosten einer Instanz:

  • Die Verwendung von Ansichten hat keinen Einfluss auf die Anforderungen einer Instanz an die Rechenkapazität, im Vergleich zur Einbettung ihres definierten Abfragetextes in Abfragen, die sich auf sie beziehen.

  • Die Verwendung von Ansichten hat einen sehr kleinen Einfluss auf den Datenbankspeicher einer Instanz, da die durch das Ausführen der Abfragedefinition einer Ansicht generierte Tabelle nicht im nichtflüchtigen Datenbankspeicher gespeichert wird.

Nächste Schritte