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 durch Ausführen der in der Ansicht definierten Abfrage. Diese virtuelle Der Inhalt der 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 Rechte des Rechnungsempfängers erstellen Ansicht oder die Rechteansicht eines Definierens. Das sind die beiden Arten von Sicherheitsmodellen, den Zugriff auf eine Ansicht für Nutzer zu steuern.
Rechteansichten des Aufrufers | Rechteansichten des Definitionrs | |
---|---|---|
Beschreibung | Wenn Sie eine Ansicht mit Aufruferrechten erstellen, muss eine Datenbankrolle Berechtigungen für die Ansicht und alle Schemaobjekte, die in der Ansicht Referenzen zum Abfragen der Ansicht. Weitere Informationen finden Sie unter Rechteansichten 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. |
Zum Erstellen der Ansicht erforderliche Berechtigungen | So erstellen, gewähren und widerrufen Sie
Zugriff auf beide Ansichtstypen haben, benötigen Sie Datenbankebene
Berechtigung „spanner.database.updateDdl “. |
|
Zum Abfragen der Ansicht erforderliche Berechtigungen | Eine Datenbankrolle benötigt Berechtigungen für die Ansicht und alle zugrunde liegenden Daten Schema-Objekte zum Abfragen der Ansicht verwenden. | Eine Datenbankrolle benötigt Berechtigungen für die Ansicht (und nur die Ansicht), um Abfrage der Ansicht. |
Vorteile von Aufrufen
Ansichten bieten gegenüber der Aufnahme der von ihnen definierten Suchanfragen 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 stark privilegierte Daten enthält die nicht allen Datenbanknutzern zugänglich gemacht werden sollen, Daten kapseln.
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. Die Rechteansichten des Definitionrs sind nützlich, benötigt eine Möglichkeit, sicher auf eine relevante Teilmenge von Spanner zuzugreifen Datenbank. Sie können z. B. die Ansicht der Rechte einer Definition folgende Daten:
- Daten zu privaten Konten (z. B. App-Nutzer)
- Rollenspezifische Daten (z. B. Personalabteilung, Vertriebsmitarbeiter).
- Standortspezifische Daten
Rechteansichten des Aufrufers
Wenn eine Ansicht die Rechte eines Aufrufers hat, bedeutet dies, dass beim Ausführen eines Abfrage der Ansicht ausführen, prüft Spanner die Berechtigungen des Nutzers für die Ansicht und alle Schemaobjekte, auf die die Ansicht verweist. Der Nutzer muss Berechtigungen für alle Schemaobjekte haben, um die Ansicht abzufragen.
Rechteansichten des Definitionrs
Die Ansicht der Rechte eines Definiereners fügt der Ansicht zusätzliche Sicherheitsfunktionen hinzu. Sie bietet unterschiedliche 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. Rechte des Definitionrs Ansichten 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. Detaillierte Zugriffssteuerung verwenden
neben der Rechteansicht der Definierenden. Andernfalls fügt die Rechteansicht
zusätzliche Zugriffssteuerung. Der Grund dafür ist,
wenn der Nutzer Leseberechtigungen hat,
für die Datenbank haben, haben sie Leseberechtigungen für alle Schemaobjekte im
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. Die
Der Unterschied besteht darin, dass ein Nutzer mit detaillierter Zugriffssteuerung keine Berechtigungen benötigt,
für die zugrunde liegenden Objekte.
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.
Rechteansichten des Definitionrs werden mit Spanner nicht unterstützt Daten-Optimierung
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.
Nutzer können eine sorgfältig formulierte Abfrage erstellen, dass Spanner einen Fehler ausgibt, der die Existenz die in der Rechtsansicht der Definitionde 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 Kriterien für hängt vom Niveau und den Prüfungsergebnissen des Teilnehmers ab. Wenn die Das Niveau des Schülers/Studenten ist gleich oder kleiner als sechs, die Punktzahl ist wichtig und der Schüler/Student muss die Prüfung mindestens 50 Punkte sammeln, um sich zu qualifizieren. Andernfalls gilt für Stufen gleich oder größer als sechs ist, erfüllt der Schüler/Student standardmäßig die Qualifikation.
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;
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.
Für Ansichten geltende Kontingente und Limits
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.