Vista geral do controlo de acesso detalhado

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 e DROP 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 e REVOKE para conceder e revogar privilégios a funções da base de dados. Os privilégios incluem SELECT, INSERT, UPDATE, DELETE e EXECUTE. Os nomes dos privilégios correspondem às declarações SQL com o mesmo nome. Por exemplo, uma função com o privilégio INSERT pode executar a declaração SQL INSERT nas tabelas especificadas na declaração GRANT.

    As seguintes declarações DDL concedem SELECT na tabela employees à função de base de dados hr_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 e INSERT, mas não operações UPDATE e DELETE.

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égio USAGE 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 e DELETE 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 e UPDATE 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. Apenas SELECT é 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égio SELECT na vista e também do privilégio SELECT 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égio SELECT 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 conceder EXECUTE 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 e UPDATE 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_readerfunção do sistema para aceder ao Key Visualizer e a spanner_info_readerfunçã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.

Herança de privilégios

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.

  1. Criar funções de base de dados e conceder privilégios às funções.
  2. Opcional: crie hierarquias de funções com herança concedendo funções a outras funções.
  3. Execute estes passos para cada principal que vai ser um utilizador do controlo de acesso detalhado:
    1. 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.
    2. Conceda autorizações do IAM a uma ou mais funções de base de dados ao principal.
    3. 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.

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?