Auf dieser Seite wird beschrieben, wie Sie benannte Schemas erstellen, verwenden und löschen und wie Sie die detaillierte Zugriffssteuerung auf Objekte in benannten Schemas anwenden. Eine Übersicht über benannte Schemas finden Sie unter Benannte Schemas.
Hinweis
Für die Verfahren auf dieser Seite benötigen Sie Folgendes:
- Die Rolle „Datenbankadministrator“ / die Rolle „spanner.databaseAdmin “ für Ihr Nutzerkonto.
- Kenntnisse zur Funktionsweise der detaillierten Zugriffssteuerung.
Benanntes Schema erstellen
Mit dem Befehl CREATE SCHEMA (GoogleSQL
und PostgreSQL)
wird ein benanntes Schema erstellt.
Öffnen Sie in der Google Cloud Console die Seite Spanner.
Wählen Sie eine Instanz aus der Liste aus.
Wählen Sie eine Datenbank aus.
Klicken Sie im Navigationsmenü auf Spanner Studio.
Öffnen Sie einen neuen Tab, indem Sie auf Neuer SQL-Editor-Tab oder Neuer Tab klicken.
Geben Sie im Tab Editor Ihre DDL ein.
GoogleSQL
Führen Sie die Anweisung
CREATE SCHEMAaus, um das benannte Schema zu erstellen, z. B.:CREATE SCHEMA sch1;Fügen Sie Datenbankobjekte im benannten Schema hinzu, z. B.:
CREATE SEQUENCE sch1.sequence OPTIONS ( sequence_kind = 'bit_reversed_positive' ); CREATE TABLE Singers ( SingerId INT64 NOT NULL, FirstName STRING(1024), LastName STRING(1024), SingerInfo BYTES(MAX), ) PRIMARY KEY(SingerId); CREATE INDEX indexOnSingers ON Singers(FirstName); CREATE TABLE Albums ( SingerId INT64 NOT NULL, AlbumId INT64 NOT NULL, AlbumTitle STRING(MAX), ) PRIMARY KEY(SingerId, AlbumId), INTERLEAVE IN PARENT Singers ON DELETE CASCADE; CREATE TABLE Songs ( SingerId INT64 NOT NULL, AlbumId INT64 NOT NULL, TrackId INT64 NOT NULL, SongName STRING(MAX), ) PRIMARY KEY(SingerId, AlbumId, TrackId), INTERLEAVE IN PARENT Albums ON DELETE CASCADE; CREATE TABLE sch1.Singers ( SingerId INT64 NOT NULL, FirstName STRING(1024), LastName STRING(1024), SingerInfo BYTES(MAX), ) PRIMARY KEY(SingerId); CREATE INDEX sch1.indexOnSingers ON sch1.Singers(FirstName); CREATE TABLE sch1.Albums ( SingerId INT64 NOT NULL, AlbumId INT64 NOT NULL, AlbumTitle STRING(MAX), ) PRIMARY KEY(SingerId, AlbumId), INTERLEAVE IN PARENT sch1.Singers ON DELETE CASCADE; CREATE TABLE sch1.Songs ( SingerId INT64 NOT NULL, AlbumId INT64 NOT NULL, TrackId INT64 NOT NULL, SongName STRING(MAX), ) PRIMARY KEY(SingerId, AlbumId, TrackId), INTERLEAVE IN PARENT sch1.Albums ON DELETE CASCADE; CREATE VIEW sch1.SingerView SQL SECURITY INVOKER AS Select s.FirstName, s.LastName, s.SingerInfo FROM sch1.Singers AS s WHERE s.SingerId = 123456; CREATE VIEW SingerView SQL SECURITY INVOKER AS Select s.FirstName, s.LastName, s.SingerInfo FROM Singers AS s WHERE s.SingerId = 123456;In Spanner können Sie nur einen Index erstellen, der dasselbe Schema wie die Tabelle verwendet, die den Index verwendet. Die Schemanamen für Index und Tabelle müssen identisch sein.
PostgreSQL
Führen Sie die Anweisung
CREATE SCHEMAaus, um das benannte Schema zu erstellen, z. B.:CREATE SCHEMA sch1;Fügen Sie Datenbankobjekte im benannten Schema hinzu, z. B.:
CREATE SEQUENCE sch1.sequence BIT_REVERSED_POSITIVE CREATE TABLE sch1.singers( singer_id bigint primary key, album_id bigint default(nextval('sch1.sequence'))) CREATE TABLE sch1.albums(k bigint default(nextval('sch1.sequence'))primary key, album_id bigint) CREATE VIEW sch1.singer_view SQL SECURITY INVOKER AS SELECT * FROM sch1.singers CREATE INDEX index_singers ON TABLE sch1.singers(album_id)In Spanner können Sie Indexe nur im selben Schema erstellen. In Spanner ist dies bei PostgreSQL-Anweisungen standardmäßig der Fall. Sie müssen keine voll qualifizierten Namen verwenden, um Indexe für benannte Schemas zu erstellen.
Sehen Sie sich die benannten Schemas und zugehörigen Objekte im Bereich Explorer an.
Detaillierte Zugriffssteuerung zu einem benannten Schema hinzufügen
Mit den folgenden DDL-Anweisungen wird die detaillierte Zugriffssteuerung zu einem benannten Schema hinzugefügt:
- Die Berechtigung
USAGEgewährt Berechtigungen für das Schemaobjekt. Die BerechtigungUSAGEwird standardmäßig für das Standardschema gewährt. Sie können die BerechtigungUSAGEjedoch für das Standardschema widerrufen. Seien Sie vorsichtig, wenn Sie den Zugriff widerrufen, da Nutzer und Rollen, deren Zugriff widerrufen wurde, den Zugriff auf alle Objekte im Standardschema verlieren. - Mit der Anweisung
ALLwerden Berechtigungen für ALLE Objekte eines Typs im Schema im Bulk-Verfahren gewährt. - Das Schlüsselwort
DEFAULTverweist in DDL-Anweisungen für die detaillierte Zugriffssteuerung auf das Standardschema.
Wenn Sie auf ein Objekt in einem benannten Schema zugreifen möchten, benötigen Sie die Berechtigung „USAGE“ für das benannte Schema und entsprechende Berechtigungen für Datenbankobjekte, die dieses Schema verwenden. Mit den folgenden Anweisungen werden beispielsweise Berechtigungen zum Lesen aus einer Tabelle gewährt:
GRANT SELECT ON TABLE SCHEMA_NAME.TABLE_NAME TO ROLE ROLE_NAME(GoogleSQL und PostgreSQL) gewährt der Rolle die Berechtigung, aus einer bestimmten Tabelle in einem Schema zu lesen. Alternativ können Sie der Rolle mit dem SchlüsselwortALLdie Berechtigung gewähren, aus allen Tabellen im Schema zu lesen. Beispiel:GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO ROLE ROLE_NAME. Die vorherige AnweisungALLgilt nur für Tabellen, die zum Zeitpunkt der Ausführung der Anweisung vorhanden sind.GRANT USAGE ON SCHEMA SCHEMA_NAME TO ROLE ROLE_NAME(GoogleSQL und PostgreSQL) gewährt der Rolle die Berechtigung, auf Objekte im Schema zuzugreifen, wenn auch die Berechtigungen des enthaltenen Objekts erfüllt sind. Wenn Sie beispielsweise aus einer Tabelle in einem Schema lesen möchten, benötigen Sie die Berechtigung „USAGE“ für das Schema und die Berechtigung „SELECT“ für die Tabelle.
Öffnen Sie in der Google Cloud Console die Seite Spanner.
Wählen Sie eine Instanz aus der Liste aus.
Wählen Sie eine Datenbank aus.
Klicken Sie im Navigationsmenü auf Spanner Studio.
Öffnen Sie einen neuen Tab, indem Sie auf Neuer SQL-Editor-Tab oder Neuer Tab klicken.
Geben Sie im Tab Editor Ihre DDL ein.
GoogleSQL
Erstellen Sie eine benutzerdefinierte Rolle für das benannte Schema. Im folgenden Beispiel verwenden wir
role1undrole2.CREATE ROLE role1 CREATE ROLE role2Gewähren Sie die Rolle für die Tabellen, die das benannte Schema verwenden, mit
GRANT ALL. Im folgenden Beispiel verwenden wirsch1für das benannte Schema undrole1für die Rolle.GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO ROLE role1Gewähren Sie die Berechtigung „USAGE“ für das Schema für die erstellten Rollen. Im folgenden Beispiel gewähren wir die Berechtigung „USAGE“ für
sch1fürrole1undrole2.GRANT USAGE ON SCHEMA sch1 TO ROLE role1, role2PostgreSQL
Erstellen Sie eine benutzerdefinierte Rolle für das benannte Schema. Im folgenden Beispiel verwenden wir
role1undrole2.CREATE ROLE role1 CREATE ROLE role2Gewähren Sie die Rolle für die Tabellen, die das benannte Schema verwenden, mit
GRANT ALL. Im folgenden Beispiel verwenden wirsch1für das benannte Schema undrole1für die Rolle.GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO role1Gewähren Sie die Berechtigung „USAGE“ für das Schema für die erstellten Rollen. Im folgenden Beispiel gewähren wir die Berechtigung „USAGE“ für
sch1fürrole1undrole2.GRANT USAGE ON SCHEMA sch1 TO role1, role2
Detaillierte Zugriffssteuerung zu einem Standardschema hinzufügen und widerrufen
Wenn Sie benannte Schemas haben, heißt das Standardschema default. Sie müssen den Schemanamen default verwenden, wenn Sie die detaillierte Zugriffssteuerung hinzufügen oder widerrufen.
Detaillierte Zugriffssteuerung zu einem Standardschema hinzufügen
Standardmäßig haben alle Nutzer und Rollen die Berechtigung USAGE für das Standardschema.
Öffnen Sie in der Google Cloud Console die Seite Spanner.
Wählen Sie eine Instanz aus der Liste aus.
Wählen Sie eine Datenbank aus.
Klicken Sie im Navigationsmenü auf Spanner Studio.
Öffnen Sie einen neuen Tab, indem Sie auf Neuer SQL-Editor-Tab oder Neuer Tab klicken.
Geben Sie im Tab Editor Ihre DDL ein.
GoogleSQL
Im folgenden Beispiel gewähren wir
role1Zugriff auf alle Tabellen.GRANT SELECT ON ALL TABLES IN SCHEMA default TO ROLE role1PostgreSQL
Im folgenden Beispiel gewähren wir
role1Zugriff auf alle Tabellen.GRANT SELECT ON ALL TABLES IN SCHEMA default TO role1
Detaillierte Zugriffssteuerung für ein Standardschema widerrufen
Sie können die Standardberechtigungen für die detaillierte Zugriffssteuerung für das Standardschema mit dem Befehl REVOKE USAGE widerrufen.
Öffnen Sie in der Google Cloud Console die Seite Spanner.
Wählen Sie eine Instanz aus der Liste aus.
Wählen Sie eine Datenbank aus.
Klicken Sie im Navigationsmenü auf Spanner Studio.
Öffnen Sie einen neuen Tab, indem Sie auf Neuer SQL-Editor-Tab oder Neuer Tab klicken.
Geben Sie im Tab Editor Ihre DDL ein.
GoogleSQL
REVOKE USAGE ON SCHEMA DEFAULT FROM ROLE publicPostgreSQL
REVOKE USAGE ON SCHEMA public FROM publicNachdem der vorherige Befehl ausgeführt wurde, müssen wir den Rollen, die auf das Standardschema zugreifen müssen, explizit Berechtigungen gewähren. Im folgenden Beispiel gewähren wir
role1Berechtigungen.GoogleSQL
Im folgenden Beispiel gewähren wir
role1Zugriff auf das Standardschema.GRANT USAGE ON SCHEMA default to ROLE role1PostgreSQL
Im folgenden Beispiel gewähren wir
role1Zugriff auf das Standardschema.GRANT USAGE ON SCHEMA public To role1
Benannte Schemas ansehen
- Wählen Sie eine Instanz aus der Liste aus.
- Wählen Sie eine Datenbank aus.
- Klicken Sie im Navigationsmenü auf Spanner Studio.
- Klicken Sie im Bereich Explorer auf den Umschalter , um die Drop-down-Liste Schemas zu maximieren.
Alternativ können Sie mit SQL alle Schemas in der Tabelle information_schema.schemata ansehen.
Im folgenden Beispiel wird gezeigt, wie Sie Schemas und ihre Inhaber ansehen:
SELECT schema_name, schema_owner
FROM information_schema.schemata
ORDER BY schema_owner
Diese Anweisung enthält eine Liste von Schemas und Inhabern, ähnlich der folgenden:
public spanner_admin
products spanner_admin
analytics spanner_admin
logs spanner_admin
pg_catalog spanner_system
information_schema spanner_system
spanner_sys spanner_system
Benanntes Schema löschen
Mit dem DROP SCHEMA Befehl (GoogleSQL
und PostgreSQL)
wird ein benanntes Schema gelöscht.
Öffnen Sie in der Google Cloud Console die Seite Spanner.
Wählen Sie eine Instanz aus der Liste aus.
Wählen Sie eine Datenbank aus.
Klicken Sie im Navigationsmenü auf Spanner Studio.
Öffnen Sie einen neuen Tab, indem Sie auf Neuer SQL-Editor-Tab oder Neuer Tab klicken.
Geben Sie im Tab Editor Ihre DDL ein.
GoogleSQL
Im folgenden Beispiel löschen wir
sch1.DROP SCHEMA IF EXISTS sch1;PostgreSQL
Im folgenden Beispiel löschen wir
sch1.DROP SCHEMA IF EXISTS sch1;
Nächste Schritte
- Best Practices für Schemas
- Erfahren Sie mehr über Ansichten.
- Erfahren Sie mehr über Sekundärindexe.
- Erfahren Sie mehr über Fremdschlüssel.