Crear y gestionar esquemas con nombre

En esta página se describe cómo crear, usar y eliminar esquemas con nombre, así como cómo aplicar un control de acceso pormenorizado a los objetos de los esquemas con nombre. Para obtener información general sobre los esquemas con nombre, consulta Esquemas con nombre.

Antes de empezar

Para llevar a cabo los procedimientos que se describen en esta página, necesitas lo siguiente:

Crear un esquema con nombre

El comando CREATE SCHEMA (GoogleSQL y PostgreSQL) se usa para crear un esquema con nombre.

  1. En la Google Cloud consola, abre la página Spanner.

    Ir a Spanner

  2. Selecciona una instancia de la lista.

  3. Selecciona una base de datos.

  4. En el menú de navegación, haz clic en Spanner Studio.

  5. Abre una pestaña nueva haciendo clic en Nueva pestaña del editor de SQL o Nueva pestaña.

  6. En la pestaña Editor, introduce tu DDL.

    GoogleSQL

    Ejecuta la instrucción CREATE SCHEMA para crear el esquema con el nombre que quieras. Por ejemplo:

    CREATE SCHEMA sch1;
    

    Añade objetos de base de datos en el esquema con nombre. Por ejemplo:

    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 solo te permite crear un índice que utilice el mismo esquema que la tabla que usa el índice. Tenemos que asegurarnos de que los nombres del índice y del esquema de la tabla sean los mismos.

    PostgreSQL

    Ejecuta la instrucción CREATE SCHEMA para crear el esquema con el nombre que quieras. Por ejemplo:

    CREATE SCHEMA sch1;
    

    Añade objetos de base de datos en el esquema con nombre. Por ejemplo:

    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 solo permite crear índices en el mismo esquema. En Spanner, las instrucciones de PostgreSQL lo hacen de forma predeterminada. No es necesario que uses nombres completos para crear índices en esquemas con nombre.

  7. Consulta los esquemas con nombre y los objetos relacionados en el panel Explorador.

Añadir control de acceso pormenorizado a un esquema con nombre

Las siguientes instrucciones DDL añaden un control de acceso detallado a un esquema con nombre:

  • El privilegio USAGE concede privilegios al objeto de esquema. El privilegio USAGE se concede de forma predeterminada al esquema predeterminado. Sin embargo, puedes revocar el privilegio USAGE del esquema predeterminado. Ten cuidado al revocar el acceso, ya que los usuarios y los roles a los que se les revoca pierden todo el acceso a los objetos del esquema predeterminado.
  • La instrucción ALL otorga privilegios de forma masiva a TODOS los objetos de un tipo en el esquema.
  • La palabra clave DEFAULT hace referencia al esquema predeterminado en las instrucciones DDL de FGAC.

Para acceder a un objeto de un esquema con nombre, debes tener permiso de uso en el esquema con nombre y los permisos correspondientes en los objetos de la base de datos que usen ese esquema. Por ejemplo, las siguientes instrucciones conceden permisos para leer una tabla:

  • GRANT SELECT ON TABLE TABLE_NAME IN SCHEMA TO ROLE ROLE_NAME (GoogleSQL y PostgreSQL) otorga al rol permiso para leer de una tabla específica de un esquema. También puedes conceder el permiso de rol para leer todas las tablas del esquema mediante la palabra clave ALL. Por ejemplo, GRANT SELECT ON ALL TABLES IN SCHEMA TO ROLE ROLE_NAME. La instrucción ALL anterior solo se aplica a las tablas presentes en el momento de ejecutar la instrucción.
  • GRANT USAGE ON SCHEMA SCHEMA_NAME TO ROLE ROLE_NAME (GoogleSQL y PostgreSQL) otorga al rol permiso para acceder a los objetos contenidos en el esquema si también se cumplen los permisos del objeto contenido. Por ejemplo, para una tabla de un esquema, necesitarías el permiso "USAGE" en el esquema y el permiso "SELECT" en la tabla para leerla.
  1. En la Google Cloud consola, abre la página Spanner.

    Ir a Spanner

  2. Selecciona una instancia de la lista.

  3. Selecciona una base de datos.

  4. En el menú de navegación, haz clic en Spanner Studio.

  5. Abre una pestaña nueva haciendo clic en Nueva pestaña del editor de SQL o Nueva pestaña.

  6. En la pestaña Editor, introduce tu DDL.

    GoogleSQL

    Crea el rol personalizado para el esquema con nombre. En el siguiente ejemplo, usamos role1 y role2.

    CREATE ROLE role1
    CREATE ROLE role2
    

    Asigna el rol a las tablas que usan el esquema con nombre mediante GRANT ALL. En el ejemplo siguiente, usamos sch1 para el esquema con nombre y role1 para el rol.

    GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO ROLE role1
    

    Concede el uso del esquema a los roles que has creado. En el siguiente ejemplo, concedemos el uso de sch1 a role1 y role2.

    GRANT USAGE ON SCHEMA sch1 TO ROLE role1, role2
    

    PostgreSQL

    Crea el rol personalizado para el esquema con nombre. En el siguiente ejemplo, usamos role1 y role2.

    CREATE ROLE role1
    CREATE ROLE role2
    

    Asigna el rol a las tablas que usan el esquema con nombre mediante GRANT ALL. En el ejemplo siguiente, usamos sch1 para el esquema con nombre y role1 para el rol.

    GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO role1
    

    Concede el uso del esquema a los roles que has creado. En el siguiente ejemplo, concedemos el uso de sch1 a role1 y role2.

    GRANT USAGE ON SCHEMA sch1 TO role1, role2
    

Añadir y revocar el control de acceso pormenorizado a un esquema predeterminado

Cuando tienes esquemas con nombre, el esquema predeterminado se llama default. Debes usar el nombre del esquema default al añadir o revocar el control de acceso pormenorizado.

Añadir control de acceso pormenorizado a un esquema predeterminado

De forma predeterminada, todos los usuarios y roles tienen el permiso USAGE en el esquema predeterminado.

  1. En la Google Cloud consola, abre la página Spanner.

    Ir a Spanner

  2. Selecciona una instancia de la lista.

  3. Selecciona una base de datos.

  4. En el menú de navegación, haz clic en Spanner Studio.

  5. Abre una pestaña nueva haciendo clic en Nueva pestaña del editor de SQL o Nueva pestaña.

  6. En la pestaña Editor, introduce tu DDL.

    GoogleSQL

    En el siguiente ejemplo, concedemos acceso a todas las tablas a role1.

    GRANT SELECT ON ALL TABLES IN SCHEMA default TO ROLE role1
    

    PostgreSQL

    En el siguiente ejemplo, concedemos acceso a todas las tablas a role1.

    GRANT SELECT ON ALL TABLES IN SCHEMA default TO role1
    

Revocar el control de acceso pormenorizado a un esquema predeterminado

Puedes revocar los permisos de control de acceso pormenorizado predeterminados en el esquema predeterminado mediante el comando REVOKE USAGE.

  1. En la Google Cloud consola, abre la página Spanner.

    Ir a Spanner

  2. Selecciona una instancia de la lista.

  3. Selecciona una base de datos.

  4. En el menú de navegación, haz clic en Spanner Studio.

  5. Abre una pestaña nueva haciendo clic en Nueva pestaña del editor de SQL o Nueva pestaña.

  6. En la pestaña Editor, introduce tu DDL.

    GoogleSQL

    REVOKE USAGE ON SCHEMA DEFAULT FROM ROLE public
    

    PostgreSQL

    REVOKE USAGE ON SCHEMA public FROM public
    
  7. Después de ejecutar el comando anterior, debemos conceder explícitamente permisos a los roles que necesiten acceder al esquema predeterminado. En el siguiente ejemplo, concedemos permisos a role1.

    GoogleSQL

    En el siguiente ejemplo, concedemos acceso al esquema predeterminado a role1.

    GRANT USAGE ON SCHEMA default to ROLE role1
    

    PostgreSQL

    En el siguiente ejemplo, concedemos acceso al esquema predeterminado a role1.

    GRANT USAGE ON SCHEMA public To role1
    

Ver esquemas con nombre

  1. Selecciona una instancia de la lista.
  2. Selecciona una base de datos.
  3. En el menú de navegación, haz clic en Spanner Studio.
  4. En el panel Explorador, despliega la lista Esquemas.

    Explorador con la lista de esquemas desplegada

También puedes usar SQL para ver todos los esquemas de la tabla information_schema.schemata.

En el siguiente ejemplo se muestra cómo ver los esquemas de nombres de las vistas y sus propietarios:

SELECT schema_name, schema_owner
  FROM information_schema.schemata
  ORDER BY schema_owner

Esta instrucción proporciona una lista de esquemas y propietarios, similar a la siguiente:

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

Eliminar un esquema con nombre

El comando DROP SCHEMA (GoogleSQL y PostgreSQL) se usa para eliminar un esquema con nombre.

  1. En la Google Cloud consola, abre la página Spanner.

    Ir a Spanner

  2. Selecciona una instancia de la lista.

  3. Selecciona una base de datos.

  4. En el menú de navegación, haz clic en Spanner Studio.

  5. Abre una pestaña nueva haciendo clic en Nueva pestaña del editor de SQL o Nueva pestaña.

  6. En la pestaña Editor, introduce tu DDL.

    GoogleSQL

    En el siguiente ejemplo, eliminamos sch1.

    DROP SCHEMA IF EXISTS sch1;
    

    PostgreSQL

    En el siguiente ejemplo, eliminamos sch1.

    DROP SCHEMA IF EXISTS sch1;
    

Siguientes pasos