En esta página, se describe cómo crear, usar y descartar esquemas con nombre, y cómo aplicar un control de acceso detallado a los objetos en esquemas con nombre. Para obtener una descripción general de los esquemas con nombre, consulta Esquemas con nombre.
Antes de comenzar
Para realizar los procedimientos de esta página, necesitarás lo siguiente:
- El rol Administrador de bases de datos roles/spanner.databaseAdmin en tu cuenta de usuario.
- Comprende cómo funciona el control de acceso detallado.
Crea un esquema con nombre
El comando CREATE SCHEMA
(GoogleSQL y PostgreSQL) se usa para crear un esquema con nombre.
En la consola de Google Cloud, abre la página de Spanner.
Elige una instancia de la lista.
Selecciona una base de datos.
En el menú de navegación, haz clic en Spanner Studio.
Haz clic en
Nueva pestaña del editor de SQL o Nueva pestaña para abrir una pestaña nueva.En la pestaña Editor, ingresa tu DDL.
GoogleSQL
Ejecuta la declaración
CREATE SCHEMA
para crear el esquema con nombre, por ejemplo:CREATE SCHEMA sch1;
Agrega 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 use el mismo esquema que la tabla que usa ese índice. Debemos asegurarnos de que los nombres del esquema del índice y de la tabla sean los mismos.
PostgreSQL
Ejecuta la declaración
CREATE SCHEMA
para crear el esquema con nombre, por ejemplo:CREATE SCHEMA sch1;
Agrega 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 la creación de índices en el mismo esquema. En Spanner, las instrucciones de PostgreSQL hacen esto de forma predeterminada. No es necesario usar nombres completamente calificados para crear índices en esquemas con nombre.
Consulta los esquemas con nombre y los objetos relacionados en el panel Explorador.
Agrega control de acceso detallado a un esquema con nombre
Las siguientes declaraciones DDL agregan un control de acceso detallado a un esquema con nombre:
- El privilegio
USAGE
otorga privilegios al objeto de esquema. De forma predeterminada, se otorga el privilegioUSAGE
al esquema predeterminado. Sin embargo, puedes revocar el privilegioUSAGE
del esquema predeterminado. Ten cuidado cuando revoques el acceso porque los usuarios y las funciones revocadas pierden el acceso a los objetos en el esquema predeterminado. - Con la declaración
ALL
, se otorgan privilegios de forma masiva en TODOS los objetos de un tipo en el esquema. - La palabra clave
DEFAULT
hace referencia al esquema predeterminado en las declaraciones DDL de FGAC.
Para acceder a un objeto en un esquema con nombre, debes tener permisos de uso en el esquema con nombre y los permisos correspondientes en los objetos de base de datos que usan ese esquema. Las siguientes declaraciones proporcionan estos permisos:
GRANT ALL
(GoogleSQL y PostgreSQL) otorga el permiso de función 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 posteriormente, deberás otorgar acceso a esos objetos cuando los crees.GRANT USAGE
(GoogleSQL y PostgreSQL) otorga a la función permiso para acceder a los objetos contenidos en el esquema. Esto permite que el beneficiario busque objetos dentro del esquema.
En la consola de Google Cloud, abre la página de Spanner.
Elige una instancia de la lista.
Selecciona una base de datos.
En el menú de navegación, haz clic en Spanner Studio.
Haz clic en
Nueva pestaña del editor de SQL o Nueva pestaña para abrir una pestaña nueva.En la pestaña Editor, ingresa tu DDL.
GoogleSQL
Crea tu rol personalizado para el esquema con nombre. En el siguiente ejemplo, usamos
role1
yrole2
.CREATE ROLE role1 CREATE ROLE role2
Otorga la función a las tablas que usan el esquema con nombre mediante
GRANT ALL
. En el siguiente ejemplo, usamossch1
para el esquema con nombre yrole1
para la función.GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO ROLE role1
Otorga el uso del esquema para los roles que creaste. En el siguiente ejemplo, otorgamos el uso de
sch1
arole1
yrole2
.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
yrole2
.CREATE ROLE role1 CREATE ROLE role2
Otorga la función a las tablas que usan el esquema con nombre mediante
GRANT ALL
. En el siguiente ejemplo, usamossch1
para el esquema con nombre yrole1
para la función.GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO role1
Otorga el uso del esquema para los roles que creaste. En el siguiente ejemplo, otorgamos el uso de
sch1
arole1
yrole2
.GRANT USAGE ON SCHEMA sch1 TO role1, role2
Agrega y revoca el control de acceso detallado a un esquema predeterminado
Cuando nombras esquemas, el esquema predeterminado se llama default
. Debes usar el nombre del esquema default
cuando agregues o revoques el control de acceso detallado.
Agrega control de acceso detallado a un esquema predeterminado
De forma predeterminada, todos los usuarios y las funciones tienen el permiso USAGE
en el esquema predeterminado.
En la consola de Google Cloud, abre la página de Spanner.
Elige una instancia de la lista.
Selecciona una base de datos.
En el menú de navegación, haz clic en Spanner Studio.
Haz clic en
Nueva pestaña del editor de SQL o Nueva pestaña para abrir una pestaña nueva.En la pestaña Editor, ingresa tu DDL.
GoogleSQL
En el siguiente ejemplo, le otorgamos acceso a todas las tablas a
role1
.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
Revoca el control de acceso detallado a un esquema predeterminado
Puedes revocar los permisos de control de acceso detallados predeterminados en el esquema predeterminado con el comando REVOKE USAGE
.
En la consola de Google Cloud, abre la página de Spanner.
Elige una instancia de la lista.
Selecciona una base de datos.
En el menú de navegación, haz clic en Spanner Studio.
Haz clic en
Nueva pestaña del editor de SQL o Nueva pestaña para abrir una pestaña nueva.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
Después de ejecutar el comando anterior, debemos otorgar permisos de forma explícita a las funciones que necesitan acceder al esquema predeterminado. En el siguiente ejemplo, le otorgamos permisos a
role1
.GoogleSQL
En el siguiente ejemplo, le otorgamos acceso al esquema predeterminado a
role1
.SCHEMA default to ROLE role1
PostgreSQL
En el siguiente ejemplo, le otorgamos acceso al esquema predeterminado a
role1
.GRANT USAGE ON SCHEMA public To role1
Ver esquemas con nombre
- Elige una instancia de la lista.
- Selecciona una base de datos.
- En el menú de navegación, haz clic en Spanner Studio.
En el panel Explorador, expande la lista desplegable Esquemas.
Como alternativa, puedes usar SQL para ver todos los esquemas en la tabla information_schema.schemata
.
En el siguiente ejemplo, se muestra cómo nombres de vistas para esquemas 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
Descartar un esquema con nombre
El comando DROP SCHEMA
(GoogleSQL y PostgreSQL) se usa para descartar un esquema con nombre.
En la consola de Google Cloud, abre la página de Spanner.
Elige una instancia de la lista.
Selecciona una base de datos.
En el menú de navegación, haz clic en Spanner Studio.
Haz clic en
Nueva pestaña del editor de SQL o Nueva pestaña para abrir una pestaña nueva.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?
- Obtén más información sobre las Prácticas recomendadas para el esquema.
- Obtén más información sobre las vistas.
- Obtén más información sobre los índices secundarios.
- Obtén más información sobre las claves externas.