Crea y administra esquemas nombrados

En esta página, se describe cómo crear, usar y descartar esquemas nombrados, y cómo aplicar un control de acceso detallado a los objetos en esquemas nombrados. Para obtener información general sobre los esquemas nombrados, consulta Esquemas nombrados.

Antes de comenzar

Para realizar los procedimientos de esta página, necesitas lo siguiente:

Crea un esquema con nombre

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

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

    Ir a Spanner

  2. Elige una instancia de la lista.

  3. Selecciona una base de datos.

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

  5. Para abrir una pestaña nueva, haz clic en Nueva pestaña del editor de SQL o Nueva pestaña.

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

    GoogleSQL

    Ejecuta la sentencia CREATE SCHEMA para crear el esquema nombrado, por ejemplo:

    CREATE SCHEMA sch1;
    

    Agrega objetos de base de datos en el esquema nombrado, 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 use el mismo esquema que la tabla que usa el índice. Debemos asegurarnos de que los nombres del índice y del esquema de la tabla sean los mismos.

    PostgreSQL

    Ejecuta la sentencia CREATE SCHEMA para crear el esquema nombrado, por ejemplo:

    CREATE SCHEMA sch1;
    

    Agrega objetos de base de datos en el esquema nombrado, 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 la creación de índices en el mismo esquema. En Spanner, las instrucciones de PostgreSQL hacen esto de forma predeterminada. No es necesario que uses nombres completamente calificados para crear índices en esquemas nombrados.

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

Agrega control de acceso detallado a un esquema con nombre

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

  • El privilegio USAGE otorga privilegios al objeto de esquema. El privilegio USAGE se otorga, de forma predeterminada, al esquema predeterminado. Sin embargo, puedes revocar el privilegio USAGE para el esquema predeterminado. Ten cuidado cuando revoques el acceso, ya que los usuarios y roles revocados pierden todo acceso a los objetos del esquema predeterminado.
  • La sentencia ALL otorga privilegios masivos a TODOS los objetos de un tipo en el esquema.
  • La palabra clave DEFAULT hace referencia al esquema predeterminado en las sentencias DDL de FGAC.

Para acceder a un objeto en un esquema nombrado, debes tener permiso de uso en el esquema nombrado y los permisos correspondientes en los objetos de base de datos que usan ese esquema. Las siguientes instrucciones proporcionan estos permisos:

  • GRANT ALL (GoogleSQL y PostgreSQL) otorga al rol permiso para acceder a todos los objetos de la tabla creada con el esquema nombrado. Esta declaración solo se aplica a los objetos que existen en ese momento. Si agregas más objetos a la tabla más adelante, deberás otorgarles acceso a medida que los crees.
  • GRANT USAGE (GoogleSQL y PostgreSQL) le otorga al rol permiso para acceder a los objetos contenidos en el esquema. Esto le permite al beneficiario buscar objetos dentro del esquema.
  1. En la consola de Google Cloud , abre la página Spanner.

    Ir a Spanner

  2. Elige una instancia de la lista.

  3. Selecciona una base de datos.

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

  5. Para abrir una pestaña nueva, haz clic en Nueva pestaña del editor de SQL o Nueva pestaña.

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

    GoogleSQL

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

    CREATE ROLE role1
    CREATE ROLE role2
    

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

    GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO ROLE role1
    

    Otorga el uso del esquema a los roles que creaste. En el siguiente ejemplo, otorgamos el uso de sch1 a role1 y role2.

    GRANT USAGE ON SCHEMA sch1 TO ROLE role1, role2
    

    PostgreSQL

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

    CREATE ROLE role1
    CREATE ROLE role2
    

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

    GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO role1
    

    Otorga el uso del esquema a los roles que creaste. En el siguiente ejemplo, otorgamos el uso de sch1 a role1 y role2.

    GRANT USAGE ON SCHEMA sch1 TO role1, role2
    

Agrega y revoca el control de acceso detallado a un esquema predeterminado

Cuando tienes esquemas con nombre, el esquema predeterminado se llama default. Debes usar el nombre del esquema default cuando agregues o revoques el control de acceso detallado.

Agrega un control de acceso detallado a un esquema predeterminado

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

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

    Ir a Spanner

  2. Elige una instancia de la lista.

  3. Selecciona una base de datos.

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

  5. Para abrir una pestaña nueva, haz clic en Nueva pestaña del editor de SQL o Nueva pestaña.

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

    GoogleSQL

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

    GRANT SELECT ON ALL TABLES IN SCHEMA default TO ROLE role1
    

    PostgreSQL

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

    GRANT SELECT ON ALL TABLES IN SCHEMA default TO role1
    

Cómo revocar el control de acceso detallado a un esquema predeterminado

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

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

    Ir a Spanner

  2. Elige una instancia de la lista.

  3. Selecciona una base de datos.

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

  5. Para abrir una pestaña nueva, haz clic en Nueva pestaña del editor de SQL o Nueva pestaña.

  6. En la pestaña Editor, ingresa 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 otorgar permisos de forma explícita a los roles que necesitan acceder al esquema predeterminado. En el siguiente ejemplo, otorgamos permisos a role1.

    GoogleSQL

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

    SCHEMA default to ROLE role1
    

    PostgreSQL

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

    GRANT USAGE ON SCHEMA public To role1
    

Cómo ver esquemas nombrados

  1. Elige 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, expande la lista desplegable Esquemas.

    Explorador con la lista de esquemas expandida

Como alternativa, puedes usar SQL para ver todos los esquemas en la tabla information_schema.schemata.

En el siguiente ejemplo, se muestra cómo se nombran los esquemas de vista y sus propietarios:

SELECT schema_name, schema_owner
  FROM information_schema.schemata
  ORDER BY schema_owner

Esta sentencia 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

Cómo soltar un esquema con nombre

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

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

    Ir a Spanner

  2. Elige una instancia de la lista.

  3. Selecciona una base de datos.

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

  5. Para abrir una pestaña nueva, haz clic en Nueva pestaña del editor de SQL o Nueva pestaña.

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

    GoogleSQL

    En el siguiente ejemplo, descartamos sch1.

    DROP SCHEMA IF EXISTS sch1;
    

    PostgreSQL

    En el siguiente ejemplo, descartamos sch1.

    DROP SCHEMA IF EXISTS sch1;
    

¿Qué sigue?