创建和管理已命名的架构

本页面介绍了如何创建、使用和删除已命名的架构,以及如何在 对命名架构中的对象进行精细的访问权限控制。有关以下各项的概览信息 请参阅已命名的架构

准备工作

如需执行本页面中的步骤,您需要满足以下条件:

创建已命名的架构

CREATE SCHEMA 命令 (GoogleSQLPostgreSQL) 用于创建命名架构。

  1. 在 Google Cloud 控制台中,打开 Spanner 页面。

    转到 Spanner

  2. 从列表中选择一个实例。

  3. 选择数据库。

  4. 在导航菜单中,点击 Spanner Studio

  5. 点击 即可打开新的标签页 新的 SQL 编辑器标签页 打开新的标签页

  6. Editor 标签页中,输入您的 DDL。

    GoogleSQL

    运行 CREATE SCHEMA 语句以创建命名的架构: 示例:

    CREATE SCHEMA sch1;
    

    在命名架构中添加数据库对象,例如:

    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;
    

    Spanner 仅允许您创建使用 与使用索引的表相同的架构。我们需要确保 索引和表架构名称相同。

    PostgreSQL

    运行 CREATE SCHEMA 语句以创建命名的架构: 示例:

    CREATE SCHEMA sch1;
    

    在命名架构中添加数据库对象,例如:

    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)
    

    Spanner 仅允许在同一架构中创建索引。在 Spanner 语句通过 默认值。您无需使用完全限定名称来创建索引 与已命名架构相关

  7. 探索器窗格中查看已命名架构和相关对象。

向命名架构添加精细的访问权限控制

以下 DDL 语句可向命名架构添加精细的访问权限控制:

  • USAGE 权限会授予对架构对象的权限。USAGE 权限。不过,您可以 撤消默认架构的 USAGE 权限。请慎用 撤消访问权限,因为撤消的用户和角色将失去 默认架构中的对象。
  • ALL 语句对 架构
  • DEFAULT 关键字是指 FGAC DDL 语句中的默认架构。

要访问已命名架构中的对象,您必须拥有 对使用该架构的数据库对象的相应权限 架构。以下语句提供了这些权限:

  • GRANT ALL (GoogleSQLPostgreSQL) 授予该角色访问使用 命名架构此语句仅适用于 。如果您稍后向表中添加更多对象,则需要向 在创建这些对象时访问它们。
  • GRANT USAGE (GoogleSQLPostgreSQL) 授予角色访问架构中包含的对象的权限。这个 让受助人可以在架构内查找对象。
  1. 在 Google Cloud 控制台中,打开 Spanner 页面。

    转到 Spanner

  2. 从列表中选择一个实例。

  3. 选择数据库。

  4. 在导航菜单中,点击 Spanner Studio

  5. 点击 即可打开新的标签页 新的 SQL 编辑器标签页 打开新的标签页

  6. Editor 标签页中,输入您的 DDL。

    GoogleSQL

    为指定架构创建自定义角色。在以下示例中, 我们使用 role1role2

    CREATE ROLE role1
    CREATE ROLE role2
    

    使用 GRANT ALL。在以下示例中,我们对命名架构使用 sch1 角色对应的权限为 role1

    GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO ROLE role1
    

    将您所创建的角色授予架构的使用。在以下 例如,我们会将 sch1 的使用授予 role1role2

    GRANT USAGE ON SCHEMA sch1 TO ROLE role1, role2
    

    PostgreSQL

    为指定架构创建自定义角色。在以下示例中, 我们使用 role1role2

    CREATE ROLE role1
    CREATE ROLE role2
    

    使用 GRANT ALL。在以下示例中,我们对命名架构使用 sch1 角色对应的权限为 role1

    GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO role1
    

    将您所创建的角色授予架构的使用。在以下 例如,我们会将 sch1 的使用授予 role1role2

    GRANT USAGE ON SCHEMA sch1 TO role1, role2
    

添加和撤消对默认架构的精细访问权限控制

如果您有已命名的架构,则默认架构称为 default。您需要 因此,在添加或移除精细访问权限控制时,请使用 default 架构名称。

为默认架构添加精细的访问权限控制机制

默认情况下,所有用户和角色都具有 USAGE 权限 架构。

  1. 在 Google Cloud 控制台中,打开 Spanner 页面。

    转到 Spanner

  2. 从列表中选择一个实例。

  3. 选择数据库。

  4. 在导航菜单中,点击 Spanner Studio

  5. 点击 即可打开新的标签页 新的 SQL 编辑器标签页 打开新的标签页

  6. Editor 标签页中,输入您的 DDL。

    GoogleSQL

    在以下示例中,我们会向 role1 授予对所有表的访问权限。

    GRANT SELECT ON ALL TABLES IN SCHEMA default TO ROLE role1
    

    PostgreSQL

    在以下示例中,我们会向 role1 授予对所有表的访问权限。

    GRANT SELECT ON ALL TABLES IN SCHEMA default TO role1
    

撤消对默认架构的精细访问权限控制

您可以使用 REVOKE USAGE 命令。

  1. 在 Google Cloud 控制台中,打开 Spanner 页面。

    转到 Spanner

  2. 从列表中选择一个实例。

  3. 选择数据库。

  4. 在导航菜单中,点击 Spanner Studio

  5. 点击 即可打开新的标签页 新的 SQL 编辑器标签页 打开新的标签页

  6. Editor 标签页中,输入您的 DDL。

    GoogleSQL

    REVOKE USAGE ON SCHEMA DEFAULT FROM ROLE public
    

    PostgreSQL

    REVOKE USAGE ON SCHEMA public FROM public
    
  7. 运行上一个命令后,我们必须明确地向 需要访问默认架构的角色在以下示例中, 我们会向 role1 授予权限。

    GoogleSQL

    在以下示例中,我们授予对默认架构的访问权限 role1

    SCHEMA default to ROLE role1
    

    PostgreSQL

    在以下示例中,我们授予对默认架构的访问权限 role1

    GRANT USAGE ON SCHEMA public To role1
    

查看已命名的架构

  1. 从列表中选择一个实例。
  2. 选择数据库。
  3. 在导航菜单中,点击 Spanner Studio
  4. 探索器窗格中,展开架构下拉列表。

    已展开“架构”列表的“探索器”

或者,您可以使用 SQL 查看 information_schema.schemata 表。

以下示例展示了视图如何命名架构及其所有者:

SELECT schema_name, schema_owner
  FROM information_schema.schemata
  ORDER BY schema_owner

此语句提供了类似于以下内容的架构和所有者列表:

public spanner_admin
products  spanner_admin
analytics  spanner_admin
logs  spanner_admin
pg_catalog spanner_system
information_schema spanner_system
spanner_sys   spanner_system

删除已命名的架构

DROP SCHEMA 命令 (GoogleSQLPostgreSQL) 用于删除已命名的架构。

  1. 在 Google Cloud 控制台中,打开 Spanner 页面。

    转到 Spanner

  2. 从列表中选择一个实例。

  3. 选择数据库。

  4. 在导航菜单中,点击 Spanner Studio

  5. 点击 即可打开新的标签页 新的 SQL 编辑器标签页 打开新的标签页

  6. Editor 标签页中,输入您的 DDL。

    GoogleSQL

    在以下示例中,我们会丢弃 sch1

    DROP SCHEMA IF EXISTS sch1;
    

    PostgreSQL

    在以下示例中,我们会丢弃 sch1

    DROP SCHEMA IF EXISTS sch1;
    

后续步骤