Nesta página, descrevemos como criar, usar e descartar esquemas nomeados, além de como aplicar controle de acesso refinado a objetos em esquemas nomeados. Para informações gerais sobre esquemas nomeados, consulte Esquemas nomeados.
Antes de começar
Para realizar os procedimentos nesta página, você precisa do seguinte:
- O papel Administrador de banco de dados/spanner.databaseAdmin na sua conta de usuário.
- Entenda como funciona o controle de acesso refinado.
Criar um esquema nomeado
O comando CREATE SCHEMA (GoogleSQL
e PostgreSQL)
é usado para criar um esquema nomeado.
No console Google Cloud , abra a página Spanner.
Selecione uma instância na lista.
Selecione um banco de dados.
No menu de navegação, clique em Spanner Studio.
Abra uma nova guia clicando em Nova guia do editor de SQL ou Nova guia.
Na guia Editor, insira seu DDL.
GoogleSQL
Execute a instrução
CREATE SCHEMApara criar o esquema nomeado. Por exemplo:CREATE SCHEMA sch1;Adicione objetos de banco de dados no esquema nomeado, por exemplo:
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;O Spanner só permite criar um índice que usa o mesmo esquema da tabela que usa o índice. Precisamos garantir que os nomes do índice e do esquema da tabela sejam iguais.
PostgreSQL
Execute a instrução
CREATE SCHEMApara criar o esquema nomeado. Por exemplo:CREATE SCHEMA sch1;Adicione objetos de banco de dados no esquema nomeado, por exemplo:
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)O Spanner só permite a criação de índices no mesmo esquema. No Spanner, as instruções do PostgreSQL fazem isso por padrão. Não é necessário usar nomes totalmente qualificados para criar índices em esquemas nomeados.
Confira os esquemas nomeados e os objetos relacionados no painel Explorer.
Adicionar controle de acesso refinado a um esquema nomeado
As instruções DDL a seguir adicionam controle de acesso refinado a um esquema nomeado:
- O privilégio
USAGEconcede privilégios ao objeto de esquema. O privilégioUSAGEé concedido, por padrão, ao esquema padrão. No entanto, é possível revogar o privilégioUSAGEdo esquema padrão. Tenha cuidado ao revogar o acesso, porque os usuários e papéis revogados perdem todo o acesso aos objetos no esquema padrão. - A instrução
ALLconcede privilégios em massa a TODOS os objetos de um tipo no esquema. - A palavra-chave
DEFAULTse refere ao esquema padrão nas instruções DDL da FGAC.
Para acessar um objeto em um esquema nomeado, você precisa ter permissão de uso no esquema nomeado e permissões correspondentes nos objetos de banco de dados que usam esse esquema. Por exemplo, as instruções a seguir concedem permissões para ler uma tabela:
GRANT SELECT ON TABLE TABLE_NAME IN SCHEMA SCHEMA_NAME TO ROLE ROLE_NAME(GoogleSQL e PostgreSQL) concede a permissão de função para ler de uma tabela específica em um esquema. Outra opção é conceder a permissão de leitura de todas as tabelas no esquema usando a palavra-chaveALL. Por exemplo,GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO ROLE ROLE_NAME. A instruçãoALLanterior se aplica apenas às tabelas presentes no momento da execução da instrução.GRANT USAGE ON SCHEMA SCHEMA_NAME TO ROLE ROLE_NAME(GoogleSQL e PostgreSQL) dá ao papel permissão para acessar objetos contidos no esquema se as permissões do objeto contido também forem atendidas. Por exemplo, para uma tabela em um esquema, você precisaria de "USAGE" no esquema e "SELECT" na tabela para ler dela.
No console Google Cloud , abra a página Spanner.
Selecione uma instância na lista.
Selecione um banco de dados.
No menu de navegação, clique em Spanner Studio.
Abra uma nova guia clicando em Nova guia do editor de SQL ou Nova guia.
Na guia Editor, insira seu DDL.
GoogleSQL
Crie sua função personalizada para o esquema nomeado. No exemplo a seguir, usamos
role1erole2.CREATE ROLE role1 CREATE ROLE role2Conceda a função às tabelas que usam o esquema nomeado usando
GRANT ALL. No exemplo a seguir, usamossch1para o esquema nomeado erole1para a função.GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO ROLE role1Conceda o uso do esquema para as funções que você criou. No exemplo a seguir, concedemos uso em
sch1pararole1erole2.GRANT USAGE ON SCHEMA sch1 TO ROLE role1, role2PostgreSQL
Crie sua função personalizada para o esquema nomeado. No exemplo a seguir, usamos
role1erole2.CREATE ROLE role1 CREATE ROLE role2Conceda a função às tabelas que usam o esquema nomeado usando
GRANT ALL. No exemplo a seguir, usamossch1para o esquema nomeado erole1para a função.GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO role1Conceda o uso do esquema para as funções que você criou. No exemplo a seguir, concedemos uso em
sch1pararole1erole2.GRANT USAGE ON SCHEMA sch1 TO role1, role2
Adicionar e revogar o controle de acesso refinado a um esquema padrão
Quando você tem esquemas nomeados, o esquema padrão é chamado de default. É necessário usar o nome do esquema default ao adicionar ou revogar o controle de acesso granular.
Adicionar controle de acesso refinado a um esquema padrão
Por padrão, todos os usuários e funções têm a permissão USAGE no esquema padrão.
No console Google Cloud , abra a página Spanner.
Selecione uma instância na lista.
Selecione um banco de dados.
No menu de navegação, clique em Spanner Studio.
Abra uma nova guia clicando em Nova guia do editor de SQL ou Nova guia.
Na guia Editor, insira seu DDL.
GoogleSQL
No exemplo a seguir, concedemos acesso a todas as tabelas para
role1.GRANT SELECT ON ALL TABLES IN SCHEMA default TO ROLE role1PostgreSQL
No exemplo a seguir, concedemos acesso a todas as tabelas para
role1.GRANT SELECT ON ALL TABLES IN SCHEMA default TO role1
Revogar o controle de acesso refinado a um esquema padrão
É possível revogar as permissões padrão de controle de acesso refinado no esquema padrão usando o comando
REVOKE USAGE.
No console Google Cloud , abra a página Spanner.
Selecione uma instância na lista.
Selecione um banco de dados.
No menu de navegação, clique em Spanner Studio.
Abra uma nova guia clicando em Nova guia do editor de SQL ou Nova guia.
Na guia Editor, insira seu DDL.
GoogleSQL
REVOKE USAGE ON SCHEMA DEFAULT FROM ROLE publicPostgreSQL
REVOKE USAGE ON SCHEMA public FROM publicDepois que o comando anterior for executado, precisamos conceder permissões explicitamente aos papéis que precisam acessar o esquema padrão. No exemplo a seguir, concedemos permissões a
role1.GoogleSQL
No exemplo a seguir, concedemos acesso ao esquema padrão para
role1.GRANT USAGE ON SCHEMA default to ROLE role1PostgreSQL
No exemplo a seguir, concedemos acesso ao esquema padrão para
role1.GRANT USAGE ON SCHEMA public To role1
Ver esquemas nomeados
- Selecione uma instância na lista.
- Selecione um banco de dados.
- No menu de navegação, clique em Spanner Studio.
No painel Explorer, expanda a lista suspensa Esquemas.
Como alternativa, use o SQL para conferir todos os esquemas na tabela information_schema.schemata.
O exemplo a seguir mostra como visualizar esquemas de nomes e os proprietários deles:
SELECT schema_name, schema_owner
FROM information_schema.schemata
ORDER BY schema_owner
Essa instrução fornece uma lista de esquemas e proprietários, semelhante a esta:
public spanner_admin
products spanner_admin
analytics spanner_admin
logs spanner_admin
pg_catalog spanner_system
information_schema spanner_system
spanner_sys spanner_system
Excluir um esquema nomeado
O comando DROP SCHEMA (GoogleSQL e PostgreSQL) é usado para excluir um esquema nomeado.
No console Google Cloud , abra a página Spanner.
Selecione uma instância na lista.
Selecione um banco de dados.
No menu de navegação, clique em Spanner Studio.
Abra uma nova guia clicando em Nova guia do editor de SQL ou Nova guia.
Na guia Editor, insira seu DDL.
GoogleSQL
No exemplo a seguir, descartamos
sch1.DROP SCHEMA IF EXISTS sch1;PostgreSQL
No exemplo a seguir, descartamos
sch1.DROP SCHEMA IF EXISTS sch1;
A seguir
- Saiba mais sobre as práticas recomendadas de esquema.
- Saiba mais sobre Views.
- Saiba mais sobre índices secundários.
- Saiba mais sobre chaves externas.