Benannte Schemas erstellen und verwalten

Auf dieser Seite wird beschrieben, wie Sie benannte Schemas erstellen, verwenden und löschen und wie Sie eine detaillierte Zugriffssteuerung auf Objekte in benannten Schemas anwenden. Eine Übersicht über benannte Schemas finden Sie unter Benannte Schemas.

Hinweise

Für die Verfahren auf dieser Seite benötigen Sie Folgendes:

Benanntes Schema erstellen

Mit dem Befehl CREATE SCHEMA (GoogleSQL und PostgreSQL) wird ein benanntes Schema erstellt.

  1. Öffnen Sie in der Google Cloud Console die Seite Spanner.

    Spanner aufrufen

  2. Wählen Sie eine Instanz aus der Liste aus.

  3. Wählen Sie eine Datenbank aus.

  4. Klicken Sie im Navigationsmenü auf Spanner Studio.

  5. Klicken Sie auf Neuer SQL-Editor-Tab oder Neuer Tab, um einen neuen Tab zu öffnen.

  6. Geben Sie auf dem Tab Editor Ihre DDL ein.

    GoogleSQL

    Führen Sie die Anweisung CREATE SCHEMA aus, 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, in der der Index verwendet wird. Die Namen des Index- und des Tabellenschemas müssen identisch sein.

    PostgreSQL

    Führen Sie die Anweisung CREATE SCHEMA aus, 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 ist das Erstellen von Indexen nur im selben Schema zulässig. In Spanner ist das bei PostgreSQL-Anweisungen standardmäßig der Fall. Sie müssen keine vollständig qualifizierten Namen verwenden, um Indexe für benannte Schemas zu erstellen.

  7. Die benannten Schemas und zugehörigen Objekte werden im Bereich Explorer angezeigt.

Detaillierte Zugriffssteuerung für ein benanntes Schema hinzufügen

Mit den folgenden DDL-Anweisungen wird einem benannten Schema eine detaillierte Zugriffssteuerung hinzugefügt:

  • Die Berechtigung USAGE gewährt Berechtigungen für das Schemaobjekt. Die Berechtigung USAGE wird standardmäßig für das Standardschema erteilt. Sie können das USAGE-Privileg für das Standardschema jedoch widerrufen. Seien Sie vorsichtig, wenn Sie den Zugriff widerrufen, da Nutzer und Rollen, deren Zugriff widerrufen wird, den gesamten Zugriff auf Objekte im Standardschema verlieren.
  • Mit der ALL-Anweisung werden Berechtigungen für ALLE Objekte eines Typs im Schema im Bulk gewährt.
  • Das Schlüsselwort DEFAULT bezieht sich auf das Standardschema in FGAC-DDL-Anweisungen.

Wenn Sie auf ein Objekt in einem benannten Schema zugreifen möchten, benötigen Sie die Berechtigung „usage“ für das benannte Schema und die entsprechenden 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 TABLE_NAME IN SCHEMA SCHEMA_NAME TO ROLE ROLE_NAME(GoogleSQL und PostgreSQL) gewährt die Rollenberechtigung zum Lesen aus einer bestimmten Tabelle in einem Schema. Alternativ können Sie der Rolle die Berechtigung erteilen, mit dem Schlüsselwort ALL alle Tabellen im Schema zu lesen. Beispiel: GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO ROLE ROLE_NAME. Die vorherige ALL-Anweisung gilt 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 zuzugreifen, die im Schema enthalten sind, wenn auch die Berechtigungen des enthaltenen Objekts erfüllt sind. Wenn Sie beispielsweise Daten aus einer Tabelle in einem Schema lesen möchten, benötigen Sie die Berechtigung „USAGE“ für das Schema und „SELECT“ für die Tabelle.
  1. Öffnen Sie in der Google Cloud Console die Seite Spanner.

    Spanner aufrufen

  2. Wählen Sie eine Instanz aus der Liste aus.

  3. Wählen Sie eine Datenbank aus.

  4. Klicken Sie im Navigationsmenü auf Spanner Studio.

  5. Klicken Sie auf Neuer SQL-Editor-Tab oder Neuer Tab, um einen neuen Tab zu öffnen.

  6. Geben Sie auf dem Tab Editor Ihre DDL ein.

    GoogleSQL

    Erstellen Sie eine benutzerdefinierte Rolle für das benannte Schema. Im folgenden Beispiel verwenden wir role1 und role2.

    CREATE ROLE role1
    CREATE ROLE role2
    

    Weisen Sie den Tabellen, die das benannte Schema verwenden, mit GRANT ALL die Rolle zu. Im folgenden Beispiel verwenden wir sch1 für das benannte Schema und role1 für die Rolle.

    GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO ROLE role1
    

    Gewähren Sie die Verwendung des Schemas für die von Ihnen erstellten Rollen. Im folgenden Beispiel gewähren wir role1 und role2 die Nutzung von sch1.

    GRANT USAGE ON SCHEMA sch1 TO ROLE role1, role2
    

    PostgreSQL

    Erstellen Sie eine benutzerdefinierte Rolle für das benannte Schema. Im folgenden Beispiel verwenden wir role1 und role2.

    CREATE ROLE role1
    CREATE ROLE role2
    

    Weisen Sie den Tabellen, die das benannte Schema verwenden, mit GRANT ALL die Rolle zu. Im folgenden Beispiel verwenden wir sch1 für das benannte Schema und role1 für die Rolle.

    GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO role1
    

    Gewähren Sie die Verwendung des Schemas für die von Ihnen erstellten Rollen. Im folgenden Beispiel gewähren wir role1 und role2 die Nutzung von sch1.

    GRANT USAGE ON SCHEMA sch1 TO role1, role2
    

Detaillierte Zugriffssteuerung für ein Standardschema hinzufügen und widerrufen

Wenn Sie benannte Schemas haben, heißt das Standardschema default. Sie müssen den Schemanamen default verwenden, wenn Sie eine 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.

  1. Öffnen Sie in der Google Cloud Console die Seite Spanner.

    Spanner aufrufen

  2. Wählen Sie eine Instanz aus der Liste aus.

  3. Wählen Sie eine Datenbank aus.

  4. Klicken Sie im Navigationsmenü auf Spanner Studio.

  5. Klicken Sie auf Neuer SQL-Editor-Tab oder Neuer Tab, um einen neuen Tab zu öffnen.

  6. Geben Sie auf dem Tab Editor Ihre DDL ein.

    GoogleSQL

    Im folgenden Beispiel gewähren wir role1 Zugriff auf alle Tabellen.

    GRANT SELECT ON ALL TABLES IN SCHEMA default TO ROLE role1
    

    PostgreSQL

    Im folgenden Beispiel gewähren wir role1 Zugriff auf alle Tabellen.

    GRANT SELECT ON ALL TABLES IN SCHEMA default TO role1
    

Detaillierte Zugriffssteuerung für ein Standardschema widerrufen

Sie können die standardmäßigen detaillierten Berechtigungen für die Zugriffssteuerung für das Standardschema mit dem Befehl REVOKE USAGE widerrufen.

  1. Öffnen Sie in der Google Cloud Console die Seite Spanner.

    Spanner aufrufen

  2. Wählen Sie eine Instanz aus der Liste aus.

  3. Wählen Sie eine Datenbank aus.

  4. Klicken Sie im Navigationsmenü auf Spanner Studio.

  5. Klicken Sie auf Neuer SQL-Editor-Tab oder Neuer Tab, um einen neuen Tab zu öffnen.

  6. Geben Sie auf dem Tab Editor Ihre DDL ein.

    GoogleSQL

    REVOKE USAGE ON SCHEMA DEFAULT FROM ROLE public
    

    PostgreSQL

    REVOKE USAGE ON SCHEMA public FROM public
    
  7. Nachdem der vorherige Befehl ausgeführt wurde, müssen wir den Rollen, die auf das Standardschema zugreifen müssen, explizit Berechtigungen erteilen. Im folgenden Beispiel gewähren wir Berechtigungen für role1.

    GoogleSQL

    Im folgenden Beispiel gewähren wir role1 Zugriff auf das Standardschema.

    GRANT USAGE ON SCHEMA default to ROLE role1
    

    PostgreSQL

    Im folgenden Beispiel gewähren wir role1 Zugriff auf das Standardschema.

    GRANT USAGE ON SCHEMA public To role1
    

Benannte Schemas ansehen

  1. Wählen Sie eine Instanz aus der Liste aus.
  2. Wählen Sie eine Datenbank aus.
  3. Klicken Sie im Navigationsmenü auf Spanner Studio.
  4. Maximieren Sie im Bereich Explorer die Drop-down-Liste Schemas.

    Explorer mit maximierter Schemaliste

Alternativ können Sie mit SQL alle Schemas in der Tabelle information_schema.schemata aufrufen.

Im folgenden Beispiel wird gezeigt, wie Sie Schemas und ihre Inhaber für Ansichten abrufen:

SELECT schema_name, schema_owner
  FROM information_schema.schemata
  ORDER BY schema_owner

Diese Anweisung gibt eine Liste von Schemas und Inhabern zurück, die etwa so aussieht:

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 Befehl DROP SCHEMA (GoogleSQL und PostgreSQL) wird ein benanntes Schema gelöscht.

  1. Öffnen Sie in der Google Cloud Console die Seite Spanner.

    Spanner aufrufen

  2. Wählen Sie eine Instanz aus der Liste aus.

  3. Wählen Sie eine Datenbank aus.

  4. Klicken Sie im Navigationsmenü auf Spanner Studio.

  5. Klicken Sie auf Neuer SQL-Editor-Tab oder Neuer Tab, um einen neuen Tab zu öffnen.

  6. Geben Sie auf dem Tab Editor Ihre DDL ein.

    GoogleSQL

    Im folgenden Beispiel wird sch1 entfernt.

    DROP SCHEMA IF EXISTS sch1;
    

    PostgreSQL

    Im folgenden Beispiel wird sch1 entfernt.

    DROP SCHEMA IF EXISTS sch1;
    

Nächste Schritte