Auf dieser Seite wird beschrieben, wie Sie Spanner-Ansichten erstellen und verwalten. Weitere Informationen Informationen zu Spanner-Ansichten finden Sie unter Informationen zu Ansichten.
Berechtigungen
Zum Erstellen, Gewähren und Entziehen des Zugriffs auf eine Ansicht benötigen Sie die Berechtigung
spanner.database.updateDdl
-Berechtigung.
Ansicht erstellen
Verwenden Sie die DDL-Anweisung, um eine Ansicht zu erstellen
CREATE VIEW
zum Benennen des
die Abfrage, durch die sie definiert wird,
angeben und anzeigen. Diese Anweisung hat zwei Formen:
CREATE VIEW
definiert eine neue Tabelle in der aktuellen Datenbank. Wenn eine Ansicht mit dem Namenview_name
bereits vorhanden ist, schlägt die AnweisungCREATE VIEW
fehl.CREATE OR REPLACE VIEW
definiert eine neue Tabelle in der aktuellen Datenbank. Wenn eine Ansicht mit dem Namenview_name
bereits vorhanden ist, wird ihre Definition ersetzt.
Die Syntax für die Anweisung CREATE VIEW lautet:
{CREATE | CREATE OR REPLACE } VIEW view_name SQL SECURITY { INVOKER | DEFINER } AS query
Da es sich bei einer Ansicht um eine virtuelle Tabelle handelt, ist die query
, die Sie
müssen Namen für alle Spalten in dieser virtuellen Tabelle
bereitgestellt werden.
Außerdem prüft Spanner die query
die Sie mithilfe der strikten Namensauflösung angeben, d. h., dass alle Schemaobjektnamen
muss so qualifiziert sein, dass eine eindeutige Identifizierung
Schemaobjekt verwendet wird. Beispielsweise müssen die Beispiele, die auf die Spalte SingerId
in der Tabelle Singers
folgen, als Singers.SingerId
qualifiziert sein.
Sie müssen die SQL SECURITY
entweder als INVOKER
oder DEFINER
in der
CREATE VIEW
- oder CREATE OR REPLACE VIEW
-Anweisung. Weitere Informationen zu
Informationen zum Unterschied zwischen den beiden Sicherheitstypen finden Sie im Hilfeartikel Datenansichten.
Angenommen, die Tabelle Singers
ist so definiert:
GoogleSQL
CREATE TABLE Singers ( SingerId INT64 NOT NULL, FirstName STRING(1024), LastName STRING(1024), SingerInfo BYTES(MAX) ) PRIMARY KEY (SingerId);
PostgreSQL
CREATE TABLE Singers ( SingerId BIGINT PRIMARY KEY, FirstName VARCHAR(1024), LastName VARCHAR(1024), SingerInfo BYTEA );
Sie können die Ansicht SingerNames
mit den Rechten des Aufrufers so definieren:
CREATE VIEW SingerNames SQL SECURITY INVOKER AS SELECT Singers.SingerId AS SingerId, Singers.FirstName || ' ' || Singers.LastName AS Name FROM Singers;
Die virtuelle Tabelle, die erstellt wird, wenn die Ansicht SingerNames
in einer Abfrage verwendet wird, enthält zwei
Spalten SingerId
und Name
.
Diese Definition der Ansicht SingerNames
ist zwar gültig, entspricht jedoch nicht der Best Practice für die Umwandlung von Datentypen zur Gewährleistung der Stabilität bei Schemaänderungen, wie im nächsten Abschnitt beschrieben.
Best Practices für das Erstellen von Ansichten
Um die Notwendigkeit zu minimieren, die Definition einer Ansicht zu aktualisieren, müssen Sie den Datentyp aller Tabellenspalten in der Abfrage, die die Ansicht definiert, explizit umwandeln. Wenn Sie das tun, kann die Definition der Ansicht während Schemaänderungen am Spaltentyp gültig bleiben.
So könnte beispielsweise die folgende Definition der Ansicht SingerNames
zu
ungültig, da der Datentyp einer Spalte in der Tabelle Singers
geändert wird.
CREATE VIEW SingerNames SQL SECURITY INVOKER AS SELECT Singers.SingerId AS SingerId, Singers.FirstName || ' ' || Singers.LastName AS Name FROM Singers;
Sie können verhindern, dass die Ansicht ungültig wird, indem Sie die Spalten explizit in den gewünschten Datentypen:
GoogleSQL
CREATE OR REPLACE VIEW SingerNames SQL SECURITY INVOKER AS SELECT CAST(Singers.SingerId AS INT64) AS SingerId, CAST(Singers.FirstName AS STRING) || " " || CAST(Singers.LastName AS STRING) AS Name FROM Singers;
PostgreSQL
CREATE OR REPLACE VIEW SingerNames SQL SECURITY INVOKER AS SELECT CAST(Singers.SingerId AS bigint) AS SingerId, CAST(Singers.FirstName AS varchar) || ' ' || CAST(Singers.LastName AS varchar) AS Name FROM Singers;
Zugriff auf eine Ansicht gewähren und widerrufen
Als Nutzer mit detaillierter Zugriffssteuerung benötigen Sie die Berechtigung SELECT
für
eine Ansicht. So gewähren Sie einer Datenbankrolle die Berechtigung SELECT
für eine Ansicht:
GoogleSQL
GRANT SELECT ON VIEW SingerNames TO ROLE Analyst;
PostgreSQL
GRANT SELECT ON TABLE SingerNames TO Analyst;
So widerrufen Sie die Berechtigung SELECT
für eine Ansicht aus einer Datenbankrolle:
GoogleSQL
REVOKE SELECT ON VIEW SingerNames FROM ROLE Analyst;
PostgreSQL
REVOKE SELECT ON TABLE SingerNames FROM Analyst;
Ansicht abfragen
Die Abfrage der Rechte eines Aufrufers oder einer Definition für die Rechte einer Definition lässt sich auf dieselbe Weise abfragen. Abhängig vom Sicherheitstyp der Ansicht die Schemaobjekte, auf die in der Ansicht verwiesen wird, mit einem Vergleich der die Datenbankrolle des Hauptkontos, das die Abfrage aufgerufen hat.
Rechteansicht eines Aufrufers abfragen
Wenn eine Ansicht die Rechte eines Aufrufers hat, muss der Nutzer Berechtigungen für alle zugrunde liegenden Schema-Objekte der Ansicht erstellen, um sie abzufragen.
Wenn beispielsweise eine Datenbankrolle Zugriff auf alle Objekte hat, auf die im
SingerNames
-Ansicht können sie die SingerNames
-Ansicht abfragen:
SELECT COUNT(SingerID) as SingerCount FROM SingerNames;
Rechteansicht eines Definitionstellers abfragen
Wenn eine Ansicht über die Rechte eines Definierens verfügt, kann ein Nutzer die Ansicht abfragen, ohne dass
Berechtigungen für die zugrunde liegenden Objekte, solange Sie dem Nutzer die erforderliche Rolle
SELECT
Berechtigung für die Datenansicht.
Im folgenden Beispiel möchte ein Nutzer mit der Datenbankrolle „Analyst“ eine Abfrage
Ansicht SingerNames
Der Zugriff wird dem Nutzer jedoch aus folgendem Grund verweigert: SingerNames
ist die Rechteansicht eines Aufrufers und die Rolle „Analyst“ hat keinen Zugriff auf alle
zugrunde liegende Objekte. Wenn Sie der Analysefachkraft
hat aber keinen Zugriff auf die Datenansicht "Singers
".
können Sie den Sicherheitstyp der Ansicht ersetzen, um
der Definition der Rechte. Nachdem Sie den Sicherheitstyp der Ansicht ersetzt haben, gewähren Sie den
Analysten-Rollenzugriff auf die Ansicht. Der Nutzer kann jetzt die Ansicht SingerNames
abfragen
auch wenn sie keinen Zugriff auf die Tabelle Singers
haben.
SELECT COUNT(SingerID) as SingerCount FROM SingerNames;
Ansicht ersetzen
Sie können eine Ansicht ersetzen, indem Sie die Anweisung CREATE OR REPLACE VIEW
verwenden, um
die Definition der Ansicht
oder den Sicherheitstyp der Ansicht.
Das Ersetzen einer Ansicht ist mit dem Verwerfen und Neuerstellen einer Ansicht vergleichbar. Beliebiger Zugriff Berechtigungen, die der anfänglichen Ansicht zugewiesen wurden, müssen nach dem Ersetzen der Ansicht.
So ersetzen Sie die Rechteansicht eines Aufrufers durch die Rechteansicht eines Definiereners:
CREATE OR REPLACE VIEW SingerNames SQL SECURITY DEFINER AS SELECT Singers.SingerId AS SingerId, Singers.FirstName || ' ' || Singers.LastName AS Name FROM Singers;
Ansicht löschen
Nach dem Löschen einer Ansicht verlieren Datenbankrollen mit Berechtigungen
Zugriff haben. Verwenden Sie zum Löschen einer Ansicht die Anweisung DROP VIEW
.
DROP VIEW SingerNames;
Informationen zu einer Ansicht abrufen
Sie können Informationen über Ansichten in einer Datenbank abrufen, indem Sie Tabellen in
INFORMATION_SCHEMA
-Schema.
Das
INFORMATION_SCHEMA.TABLES
stellt die Namen aller definierten Ansichten bereit.Das
INFORMATION_SCHEMA.VIEWS
enthält die Namen, die Definition der Ansicht, den Sicherheitstyp und den Abfragetext allen definierten Datenansichten. FGAC-Nutzer mitSELECT
Berechtigung für die Datenansicht können Informationen zur Ansicht aus der TabelleINFORMATION_SCHEMA.VIEWS
abrufen. Andere FGAC-Nutzer benötigen die Rollespanner_info_reader
, falls sie nichtSELECT
Berechtigung für die Datenansicht.
Um die Definition der Datenansicht und den Sicherheitstyp einer Ansicht mit dem Namen
ProductSoldLastWeek
:
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'ProductSoldLastWeek';