In diesem Dokument werden Spanner-Ansichten vorgestellt und beschrieben.
Übersicht
Eine Ansicht ist eine virtuelle Tabelle, die durch eine SQL-Abfrage definiert wird. Wenn Sie eine Ansicht erstellen, geben Sie die SQL-Abfrage an, die sie darstellt. Nachdem Sie eine Ansicht erstellt haben, können Sie Abfragen ausführen, die sich auf die Ansicht beziehen, als wäre sie eine Tabelle.
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 dieser virtuellen Tabelle wird von der verweisenden Abfrage verwendet.
Da die Abfrage, die eine Ansicht definiert, jedes Mal ausgeführt wird, wenn eine Abfrage ausgeführt wird, die sich auf die Ansicht bezieht, werden Ansichten manchmal als logische Ansichten oder dynamische Ansichten bezeichnet, um sie von materialisierten SQL-Ansichten zu unterscheiden, die die Ergebnisse der Abfrage, die die Ansicht definiert, als tatsächliche Tabelle im Datenspeicher speichern.
In Spanner können Sie eine Ansicht entweder als Ansicht mit Aufruferrechten oder als Ansicht mit Erstellerrechten erstellen. Dies sind die beiden Arten von Sicherheitsmodellen, die den Zugriff auf eine Ansicht für Nutzer steuern.
| Ansichten mit Aufruferrechten | Ansichten mit den Rechten des Erstellers | |
|---|---|---|
| Beschreibung | Wenn Sie eine Ansicht mit den Berechtigungen des Aufrufers 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 Ansichten mit Aufruferrechten. | Wenn Sie eine Ansicht mit den Rechten des Erstellers erstellen, benötigt eine Datenbankrolle Berechtigungen für die Ansicht (und nur für die Ansicht), um die Ansicht abzufragen. Verwenden Sie die detaillierte Zugriffssteuerung zusammen mit der Ansicht mit Erstellerrechten, da die Ansicht mit Erstellerrechten sonst keine zusätzliche Zugriffssteuerung bietet. Weitere Informationen finden Sie unter Ansichten mit den Rechten des Erstellers. |
| Erforderliche Berechtigungen zum Erstellen der Ansicht | Zum Erstellen, Gewähren und Widerrufen des Zugriffs auf beide Ansichtstypen benötigen Sie die Berechtigung spanner.database.updateDdl auf Datenbankebene. |
|
| Erforderliche Berechtigungen zum Abfragen der Ansicht | 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. |
Parametrisierte Ansichten
Eine parametrisierte Ansicht erweitert Standardansichten, um einen besseren Datenschutz zu bieten, insbesondere in Anwendungen, die KI-Agenten oder Large Language Models (LLMs) verwenden. Der Hauptzweck besteht darin, Parameter wie die Nutzeridentität sicher direkt in die Definition der Ansicht einzufügen. Für diesen Ansichtstyp ist das Sicherheitsmodell Ansicht mit den Rechten des Erstellers erforderlich, mit dem Spanner die Sicherheit auf Zeilenebene dynamisch basierend auf dem abfragenden Nutzer erzwingen kann.
Weitere Informationen finden Sie unter Übersicht über parametrisierte Ansichten.
Vorteile von Aufrufen
Ansichten bieten mehrere Vorteile gegenüber der Einbindung der von ihnen definierten Abfragen in die Anwendungslogik.
Ansichten können für Anwendungen eine logische Datenmodellierung bieten.
Manchmal sind die Entscheidungen, die für die physische Datenmodellierung in Spanner sinnvoll sind, nicht die beste Abstraktion für Anwendungen, die diese Daten lesen. Eine Ansicht kann ein alternatives Tabellenschema darstellen, das eine geeignetere Abstraktion für Anwendungen 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 dafür sorgen, dass Schemaänderungen an den Objekten (Tabellen, Spalten usw.), auf die sich die Abfrage bezieht, die Abfrage nicht ungültig machen.
Gängige Anwendungsfälle
Verwenden Sie Ansichten, wenn Ihre Spanner-Datenbank hochprivilegierte Daten enthält, die nicht für alle Datenbanknutzer zugänglich sein sollen, oder wenn Sie Ihre Daten kapseln möchten.
Wenn Ihre Ansicht keine zusätzlichen Sicherheitsfunktionen benötigt und alle Aufrufer der Ansicht Zugriff auf alle Schemaobjekte haben, auf die die Ansicht verweist, erstellen Sie eine Ansicht mit Aufruferrechten.
Wenn Sie eine Ansicht erstellen möchten, in der nicht alle Aufrufer Zugriff auf alle Schemaobjekte haben, auf die die Ansicht verweist, erstellen Sie eine Ansicht mit den Rechten des Erstellers. Ansichten mit den Rechten des Erstellers sind besser geschützt und unterliegen mehr Einschränkungen, da der Datenbankadministrator weniger Nutzern Berechtigungen für die in der Ansicht referenzierten Tabellen und Spalten gewähren kann. Ansichten mit den Rechten des Erstellers sind nützlich, wenn ein Nutzer eine Möglichkeit benötigt, sicher auf eine relevante Teilmenge einer Spanner-Datenbank zuzugreifen. Sie können beispielsweise eine Ansicht mit den Rechten des Erstellers für die folgenden Daten erstellen:
- Persönliche Kontodaten (z. B. Kunde der Anwendung)
- Rollenspezifische Daten (z. B. Personalabteilung, Vertriebsmitarbeiter)
- Standortspezifische Daten.
Ansichten mit Aufruferrechten
Wenn eine Ansicht Aufruferrechte hat, bedeutet dies, dass Spanner die Berechtigungen des Nutzers für die Ansicht und alle Schemaobjekte, auf die die Ansicht verweist, prüft, wenn ein Nutzer (der Aufrufer) eine Abfrage für die Ansicht ausführt. Der Nutzer muss Berechtigungen für alle Schemaobjekte haben, um die Ansicht abzufragen.
Ansichten mit den Rechten des Erstellers
Eine Ansicht mit den Rechten des Erstellers fügt der Ansicht zusätzliche Sicherheitsfunktionen hinzu. Sie bietet verschiedene Berechtigungen für die Ansicht und die zugrunde liegenden Schemaobjekte. Wie bei Ansichten mit Aufruferrechten müssen Nutzer Berechtigungen auf Datenbankebene haben, um Ansichten mit Erstellerrechten zu erstellen. Der Hauptunterschied besteht darin, dass Spanner beim Abfragen einer Ansicht mit den Rechten des Erstellers durch eine Datenbankrolle prüft, ob die Rolle Zugriff auf die Ansicht selbst (und nur auf die Ansicht) hat. Selbst wenn der Nutzer, der die Ansicht abfragt, keinen Zugriff auf alle zugrunde liegenden Schemaobjekte hat, kann er auf die Ansicht zugreifen und deren Inhalte sehen. Ansichten mit den Rechten des Erstellers gewähren Nutzern Zugriff auf aktuelle Daten, beschränkt auf die in der Ansicht definierten Zeilen.
IAM-Berechtigungen (Identity and Access Management) für Spanner werden auf Datenbankebene gewährt. Verwenden Sie die detaillierte Zugriffssteuerung zusammen mit der Ansicht mit Erstellerrechten, da die Ansicht mit Erstellerrechten sonst keine zusätzliche Zugriffssteuerung bietet. Wenn der Nutzer Leseberechtigungen für die Datenbank hat, hat er auch Leseberechtigungen für alle Schemaobjekte in der Datenbank. Nachdem Sie die detaillierte Zugriffssteuerung für Ihre Datenbank konfiguriert haben, können Nutzer mit der Berechtigung SELECT für die Ansicht und Nutzer mit Berechtigungen auf Datenbankebene für die Datenbank die Ansicht abfragen. Der Unterschied besteht darin, dass der Nutzer mit detaillierter 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.
Ansichten haben Lesezugriff. 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.
Ansichten mit den Rechten des Erstellers werden mit Spanner Data Boost nicht unterstützt.
Das Ausführen einer Abfrage, die eine Ansicht mit den Rechten des Erstellers in Data Boost enthält, führt zu einem Fehler.
Der empfohlene Abfragemodus für den Zugriff auf eine Ansicht mit den Rechten des Erstellers ist der
NORMAL-Modus.Nutzer, die keinen Zugriff auf die zugrunde liegenden Schemaobjekte einer Ansicht mit den Rechten des Erstellers haben, erhalten eine Fehlermeldung, wenn sie in einem anderen Abfragemodus als dem normalen Abfragemodus Abfragen ausführen.
Es ist möglich, dass ein Nutzer eine sorgfältig gestaltete Abfrage erstellt, die dazu führt, dass Spanner einen Fehler ausgibt, der die Existenz von Daten anzeigt oder offenlegt, die in der Ansicht mit den Rechten des Erstellers nicht verfügbar sind.
Angenommen, es gibt die folgende Ansicht „QualifiedStudentScores“, die die Punktzahlen von Schülern zurückgibt, die sich für einen Kurs qualifizieren. Die Kriterien für die Qualifizierung basieren auf dem Niveau und dem Prüfungsergebnis der Schüler. Wenn das Niveau des Schülers/Studenten kleiner oder gleich sechs ist, ist die Punktzahl wichtig und der Schüler/Student muss mindestens 50 Punkte in der Prüfung erreichen, um sich zu qualifizieren. Andernfalls qualifiziert sich der Schüler oder Student standardmäßig für Stufen ab sechs.
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 „Division durch null“ fehlschlagen, wenn es einen Schüler oder Studenten in Stufe 7 gibt, der 20 Punkte erreicht hat, obwohl die Ansicht die Daten für diese Stufe auf 50 Punkte und mehr beschränkt.
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.