In diesem Thema 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 es 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 und 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 SQL-materialisierten Ansichten zu unterscheiden, bei denen die Ergebnisse der Abfrage, die die Ansicht definiert, als tatsächliche Tabelle im Datenspeicher gespeichert werden.
In Spanner können Sie eine Ansicht entweder als Ansicht mit Berechtigungen des Aufrufers oder als Ansicht mit Berechtigungen des Definierers erstellen. Das sind die beiden Arten von Sicherheitsmodellen, die den Zugriff auf eine Ansicht für Nutzer steuern.
Ansichten der Rechte des Aufrufers | Ansichten der Rechte des Erstellers | |
---|---|---|
Beschreibung | Wenn Sie eine Ansicht mit den Rechten 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 der Berechtigungen des Aufrufers. | 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 der Rechte des Definierers. Andernfalls wird durch die Ansicht der Rechte des Definierers keine zusätzliche Zugriffssteuerung hinzugefügt. Weitere Informationen finden Sie unter Ansichten der Rechte des Definierers. |
Erforderliche Berechtigungen zum Erstellen der Ansicht | Wenn Sie Zugriff auf einen der beiden Ansichtstypen erstellen, gewähren oder widerrufen möchten, 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. |
Vorteile von Aufrufen
Ansichten bieten mehrere Vorteile im Vergleich zum Einbeziehen der von ihnen definierten Abfragen in die Anwendungslogik.
Ansichten können für Anwendungen eine logische Datenmodellierung bieten.
Manchmal sind die Optionen, 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 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 statt in der Anwendungslogik gespeichert wird, kann und wird 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 Daten mit hohen Berechtigungen enthält, die nicht für alle Datenbanknutzer sichtbar sein sollen, oder wenn Sie Ihre Daten kapseln möchten.
Wenn für Ihre Ansicht keine zusätzlichen Sicherheitsfunktionen erforderlich sind und alle Aufrufer der Ansicht Zugriff auf alle Schemaobjekte haben, auf die die Ansicht verweist, erstellen Sie eine Ansicht der Berechtigungen des 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 eine Ansicht mit Berechtigungen des Definierers. Ansichten mit Berechtigungen des Definierers sind besser geschützt und unterliegen mehr Einschränkungen, da der Datenbankadministrator weniger Nutzern Berechtigungen für die Tabellen und Spalten gewähren kann, auf die in der Ansicht verwiesen wird. Ansichten mit Berechtigungen des Definierers sind nützlich, wenn ein Nutzer sicher auf einen relevanten Teil einer Spanner-Datenbank zugreifen muss. Sie können beispielsweise eine Ansicht mit den Berechtigungen des Erstellers für die folgenden Daten erstellen:
- Daten zu privaten Konten (z. B. App-Nutzer)
- Rollenspezifische Daten (z.B. Personalabteilung, Vertriebsmitarbeiter).
- Standortspezifische Daten
Ansichten der Rechte des Aufrufers
Wenn eine Datenansicht die Rechte des Aufrufers hat, bedeutet das, dass Spanner die Berechtigungen des Nutzers für die Datenansicht und alle Schemaobjekte prüft, auf die die Datenansicht verweist, wenn ein Nutzer (der Aufrufer) eine Abfrage für die Datenansicht ausführt. Der Nutzer muss Berechtigungen für alle Schemaobjekte haben, um die Ansicht abzufragen.
Ansichten der Rechte des Erstellers
Die Rechteansicht eines Definierers fügt der Ansicht zusätzliche Sicherheitsfunktionen hinzu. Sie bietet verschiedene Berechtigungen für die Ansicht und die zugrunde liegenden Schemaobjekte. Wie bei Ansichten der Rechte des Aufrufers benötigen Nutzer Berechtigungen auf Datenbankebene, um Ansichten der Rechte des Definierers zu erstellen. Der Hauptunterschied besteht darin, dass Spanner bei einer Abfrage der Rechteansicht eines Definierers 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 ihren Inhalt sehen. Mit Ansichten mit Berechtigungen des Erstellers erhalten Nutzer Zugriff auf aktuelle Daten, der auf die in der Ansicht definierten Zeilen beschränkt ist.
IAM-Berechtigungen (Identity and Access Management) für Spanner werden auf Datenbankebene gewährt. Verwenden Sie die detaillierte Zugriffssteuerung zusammen mit der Ansicht der Rechte des Definierers. Andernfalls bietet die Ansicht der Rechte des Definierers keine zusätzliche Zugriffssteuerung. Wenn der Nutzer Leseberechtigungen für die Datenbank hat, hat er 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 die Ansicht abfragen. Der Unterschied besteht darin, dass der Nutzer mit 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.
Ansichten sind schreibgeschützt. Sie können damit keine Daten hinzufügen, aktualisieren oder löschen.
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.
Die Read API unterstützt keine Datenansichten.
Ansichten mit Definitionen der Rechte des Erstellers werden von Spanner Data Boost nicht unterstützt.
Das Ausführen einer Abfrage, die die Ansicht der Rechte eines Definierers in Data Boost enthält, führt zu einem Fehler.
Der empfohlene Abfragemodus für den Zugriff auf die Rechteansicht eines Definierers ist der
NORMAL
-Modus.Nutzer, die keinen Zugriff auf die zugrunde liegenden Schemaobjekte der Rechteansicht eines Definierers haben, erhalten eine Fehlermeldung, wenn sie eine Abfrage in einem anderen Abfragemodus als dem Normalmodus ausführen.
Es ist möglich, dass ein Nutzer eine sorgfältig formulierte Abfrage erstellt, die dazu führt, dass Spanner einen Fehler ausgibt, der das Vorhandensein von Daten anzeigt oder offenbart, die in der Rechteansicht des Definierers nicht verfügbar sind.
Angenommen, es gibt die folgende Ansicht „QualifiedStudentScores“, die die Noten von Schülern zurückgibt, die für einen Kurs infrage kommen. Die Qualifikationskriterien basieren auf dem Niveau und dem Prüfungsergebnis des Schülers oder Studenten. Wenn das Niveau des Schülers/Studenten gleich oder niedriger als 6 ist, spielt die Punktzahl eine Rolle und er muss mindestens 50 Punkte in der Prüfung erreichen, um sich zu qualifizieren. Andernfalls ist der Schüler/Student bei Stufe 6 oder höher standardmäßig berechtigt.
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 von
SELECT * FROM QualifiedStudentScores s WHERE s.Level = 7 AND 1/(s.Score - 20) = 1;
ausführen. Diese Abfrage kann mit dem Fehler „Division durch Null“ fehlschlagen, wenn ein Schüler/Student auf Stufe 7 eine Punktzahl von 20 Punkten hat, obwohl die Daten in der Ansicht für diese Stufe auf 50 Punkte und mehr begrenzt sind.
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 sind Kontingent- und Limitinformationen speziell für Ansichten aufgelistet.
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.