O controlo de acesso detalhado do Spanner combina as vantagens da gestão de identidade e de acesso (IAM) com o controlo de acesso baseado em funções SQL. Com o controlo de acesso detalhado, define funções de base de dados, concede privilégios às funções e cria políticas de IAM para conceder autorizações nas funções de base de dados aos principais do IAM. Esta página descreve como usar o controlo de acesso detalhado com o Spanner para bases de dados com dialeto GoogleSQL e bases de dados com dialeto PostgreSQL.
Como administrador, tem de ativar o controlo de acesso detalhado para os principais do IAM individuais. Os principais para os quais o controlo de acesso detalhado está ativado ("utilizadores do controlo de acesso detalhado") têm de assumir uma função de base de dados para aceder aos recursos do Spanner.
O acesso aos recursos para utilizadores que não são utilizadores do controlo de acesso detalhado é regido pelas funções ao nível da base de dados do IAM. O controlo de acesso detalhado é totalmente compatível e pode coexistir com o controlo de acesso ao nível da base de dados do IAM existente. Pode usá-lo para aceder a objetos de base de dados individuais. Para controlar o acesso a toda a base de dados, use as funções da IAM.
Com o controlo de acesso detalhado, pode controlar o acesso a tabelas, colunas, vistas e streams de alterações.
Para gerir o controlo de acesso detalhado, usa as seguintes declarações DDL:
CREATE
eDROP
para criar e eliminar funções da base de dados. As funções da base de dados são coleções de privilégios. Pode criar até 100 funções para uma base de dados.GRANT
eREVOKE
para conceder e revogar privilégios a funções da base de dados. Os privilégios incluemSELECT
,INSERT
,UPDATE
,DELETE
eEXECUTE
. Os nomes dos privilégios correspondem às declarações SQL com o mesmo nome. Por exemplo, uma função com o privilégioINSERT
pode executar a declaração SQLINSERT
nas tabelas especificadas na declaraçãoGRANT
.As seguintes declarações DDL concedem
SELECT
na tabelaemployees
à função de base de dadoshr_rep
.GoogleSQL
CREATE ROLE hr_rep; GRANT SELECT ON TABLE employees TO ROLE hr_rep;
PostgreSQL
CREATE ROLE hr_rep; GRANT SELECT ON TABLE employees TO hr_rep;
Para mais informações sobre privilégios, consulte o artigo Referência de privilégios de controlo de acesso detalhado.
Declarações
GRANT
para conceder funções a outras funções para criar hierarquias de funções, com herança de privilégios.
Exemplos de utilização
Seguem-se exemplos de utilização do controlo de acesso detalhado:
- Um sistema de informações de RH que tem funções para analista de remuneração de vendas, gestão de vendas e analista de RH, cada um com diferentes níveis de acesso aos dados. Por exemplo, os analistas de compensação e a gestão de vendas não devem ver os números da segurança social.
- Uma aplicação de partilha de viagens com diferentes contas de serviço e privilégios para passageiros e condutores.
- Um livro-razão que permite operações
SELECT
eINSERT
, mas não operaçõesUPDATE
eDELETE
.
Recursos do Spanner e respetivos privilégios
Segue-se uma lista de recursos do Spanner e os privilégios de controlo de acesso detalhado que pode conceder para os mesmos.
- Esquemas
- Pode conceder o privilégio
USAGE
em esquemas a funções específicas da base de dados. Para um esquema não predefinido, as funções da base de dados têm de ter o privilégioUSAGE
para aceder aos objetos da base de dados. A verificação de privilégios tem o seguinte aspeto:
Tem USAGE
no esquema?
Não: rejeite o acesso.
Sim: também tem os direitos adequados na tabela?
Não: rejeite o acesso.
Sim: pode aceder à tabela.
- Tabelas
- Pode conceder os privilégios
SELECT
,INSERT
,UPDATE
eDELETE
em tabelas a funções da base de dados. Para tabelas intercaladas, um privilégio concedido na tabela principal não é propagado para a tabela secundária. - Colunas
- Pode conceder
SELECT
,INSERT
eUPDATE
num subconjunto de colunas numa tabela. O privilégio é, então, válido apenas para essas colunas.DELETE
não é permitido ao nível da coluna. - Visualizações
- Pode conceder o privilégio
SELECT
numa visualização de propriedade. ApenasSELECT
é suportado para visualizações. O Spanner suporta vistas de direitos do invocador e vistas de direitos do definidor. Se criar uma vista com direitos do invocador, para consultar a vista, a função ou o utilizador da base de dados precisa do privilégioSELECT
na vista e também do privilégioSELECT
nos objetos subjacentes referenciados na vista. Se criar uma vista com os direitos do definidor, para consultar a vista, a função de base de dados ou o utilizador só precisa do privilégioSELECT
na vista. Para mais informações, consulte o artigo Vista geral das visualizações. - Altere as streams
- Pode conceder
SELECT
em streams de alterações. Também tem de concederEXECUTE
na função de leitura associada a uma stream de alterações. Para mais informações, consulte o artigo Controlo de acesso detalhado para streams de alterações. - Sequências
- Pode conceder
SELECT
eUPDATE
em sequências. Para mais informações, consulte o artigo Controlo de acesso detalhado para sequências. - Modelos
- Pode conceder
EXECUTE
em modelos. Para mais informações, consulte o artigo Controlo de acesso detalhado para modelos.
Funções do sistema de controlo de acesso detalhado
O controlo de acesso detalhado tem funções do sistema predefinidas para cada base de dados. Tal como as funções de base de dados definidas pelo utilizador, as funções do sistema podem controlar o acesso aos recursos do Spanner.
Por exemplo, um utilizador do controlo de acesso detalhado tem de ter a spanner_sys_reader
função do sistema para aceder ao Key Visualizer e a spanner_info_reader
função do sistema para poder ver resultados não filtrados quando consulta as tabelas INFORMATION_SCHEMA
.
Para mais informações, consulte o artigo Funções do sistema de controlo de acesso detalhado.
Hierarquias e herança de funções da base de dados
Pode criar hierarquias de funções de base de dados, em que as funções secundárias herdam os privilégios das funções principais. As funções secundárias são conhecidas como membros da função principal.
Por exemplo, considere as seguintes declarações GRANT
:
GoogleSQL
GRANT SELECT ON TABLE employees TO ROLE pii_access;
GRANT ROLE pii_access TO ROLE hr_manager, hr_director;
PostgreSQL
GRANT SELECT ON TABLE employees TO pii_access;
GRANT pii_access TO hr_manager, hr_director;
hr_manager
e hr_director
são membros da função pii_access
e herdam o privilégio SELECT
na tabela employees
.
hr_manager
e hr_director
também podem ter membros, e esses membros
herdariam o privilégio SELECT
em employees
.
Não existem limites para a profundidade das hierarquias de funções, mas o desempenho das consultas pode degradar-se com estruturas de hierarquia de funções profundas e amplas.
Cópia de segurança e restauro
As cópias de segurança do Spanner incluem definições de funções da base de dados. Quando uma base de dados é restaurada a partir da cópia de segurança, as funções da base de dados são recriadas com os respetivos privilégios concedidos. No entanto, as políticas de IAM não fazem parte das cópias de segurança da base de dados, pelo que tem de conceder novamente acesso às funções da base de dados aos responsáveis na base de dados restaurada.
Vista geral da configuração do controlo de acesso detalhado
Seguem-se os passos de nível elevado que tem de realizar para começar a proteger os dados com o controlo de acesso detalhado. Para ver detalhes, consulte o artigo Configure o controlo de acesso detalhado.
Tem de lhe ser concedida a função de IAM roles/spanner.admin
ou roles/spanner.databaseAdmin
para realizar estas tarefas.
- Criar funções de base de dados e conceder privilégios às funções.
- Opcional: crie hierarquias de funções com herança concedendo funções a outras funções.
- Execute estes passos para cada principal que vai ser um utilizador do controlo de acesso detalhado:
- Ative o controlo de acesso detalhado para o principal.
Em seguida, é concedida automaticamente ao principal a função de base de dados
public
, que não tem privilégios por predefinição. Esta é uma operação única para cada diretor. - Conceda autorizações do IAM a uma ou mais funções de base de dados ao principal.
- Depois de o principal receber todas as funções de base de dados necessárias, se o principal tiver funções de IAM ao nível da base de dados, considere revogar as funções ao nível da base de dados para que o controlo de acesso do principal seja gerido por apenas um método.
- Ative o controlo de acesso detalhado para o principal.
Em seguida, é concedida automaticamente ao principal a função de base de dados
Limitações
- As operações de exportação não exportam funções nem privilégios da base de dados, e as operações de importação não os podem importar. Tem de configurar manualmente as funções e os privilégios após a conclusão da importação.
- O separador Dados na página TABELA na consola não está disponível para utilizadores com controlo de acesso detalhado. Google Cloud
O que se segue?
- Aceda a uma base de dados com controlo de acesso detalhado
- Controlo de acesso detalhado para streams de alterações
- Configure o controlo de acesso detalhado
- Referência de privilégios de controlo de acesso detalhado
- Funções do sistema de controlo de acesso detalhado
- Declarações
GRANT
eREVOKE
do GoogleSQL - PostgreSQL
GRANT
e declaraçõesREVOKE
- Controlo de acesso detalhado para sequências
- Controlo de acesso detalhado para modelos