Visão geral do controle de acesso detalhado

O controle de acesso detalhado do Spanner combina os benefícios do gerenciamento de identidade e acesso (IAM) com o controle de acesso baseado em função do SQL. Com o controle de acesso refinado, você define papéis de banco de dados, concede privilégios a eles e cria políticas do IAM para conceder permissões em papéis de banco de dados a principais do IAM.

Como administrador, você precisa ativar o controle de acesso detalhado para cada principais. Diretores para as quais o controle de acesso refinado está ativado ("usuários de controle de acesso refinado") precisam assumir um banco de dados para acessar os recursos do Spanner.

O acesso a recursos para usuários que não são de controle de acesso refinado é governado por funções no nível do banco de dados do IAM. O controle de acesso minucioso é totalmente compatível e pode coexistir com os Controle de acesso no nível do banco de dados do IAM. Você pode usá-lo para acessar objetos individuais de banco de dados. Para controlar o acesso a todo o banco de dados, use papéis do IAM.

Com o controle de acesso detalhado, é possível controlar o acesso a tabelas, colunas, visualizações e fluxos de mudanças.

Para gerenciar o controle de acesso refinado, use as seguintes instruções DDL:

  • Instruções CREATE e DROP para criar e descartar papéis de banco de dados. Os papéis do banco de dados são coleções de privilégios. É possível criar até 100 funções para um banco de dados.
  • Declarações GRANT e REVOKE para conceder e revogar privilégios de e para funções de banco de dados. Os privilégios incluem SELECT, INSERT, UPDATE, DELETE e EXECUTE. Nomes de privilégios correspondem às instruções SQL com nomes semelhantes. Por exemplo, um papel com o O privilégio INSERT pode executar a instrução SQL INSERT nas tabelas que são especificadas na instrução GRANT.

    As instruções DDL a seguir concedem SELECT na tabela employees ao papel do banco 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 Referência de privilégios de controle de acesso detalhado.

  • instruções GRANT para conceder papéis a outros papéis para criar hierarquias de com herança de privilégios.

Casos de uso

Confira abaixo exemplos de casos de uso para controle de acesso refinado:

  • Um sistema de informações de RH que tem funções para analista de compensação de vendas, gerenciamento de vendas e analista de RH, cada um com níveis de acesso diferentes aos dados. Por exemplo, analistas de compensação e gerentes de vendas não podem acessar CPFs ou CNPJs.
  • Um aplicativo de transporte por aplicativo com diferentes contas de serviço e privilégios para passageiros e motoristas.
  • Uma escrituração que permite operações SELECT e INSERT, mas não operações UPDATE e DELETE.

Recursos do Spanner e seus privilégios

Confira a seguir uma lista de recursos do Spanner e os privilégios de controle de acesso detalhado que podem ser concedidos a eles.

Esquemas
É possível conceder o privilégio USAGE em esquemas a papéis específicos do banco de dados. Para um esquema não padrão, os papéis de banco de dados precisam ter o privilégio USAGE para acessar os objetos do banco de dados. A verificação de privilégio é semelhante a esta:

Você tem USAGE no esquema?

Não: recusar o acesso.

Sim: você também tem os direitos adequados na tabela?

Não: recuse o acesso.

Sim: você pode acessar a tabela.

Tabelas
Você pode conceder os privilégios SELECT, INSERT, UPDATE e DELETE em de tabelas para papéis de banco de dados. Para tabelas intercaladas, um privilégio concedido na a tabela mãe não será propagada para a filha.
Colunas
É possível conceder SELECT, INSERT e UPDATE em um subconjunto de colunas em uma tabela. O privilégio é válido apenas para essas colunas. DELETE não é permitidos no nível da coluna.
Visualizações
É possível conceder o privilégio SELECT em uma visualização. Apenas SELECT tem suporte para visualizações. O Spanner oferece suporte às visualizações de direitos do invocador e do definidor. Se você criar uma visualização com direitos de invocação, para consultar a visualização, o usuário ou a função do banco de dados precisa ter o privilégio SELECT na visualização e também o privilégio SELECT nos objetos subjacentes referenciados na visualização. Se você criar uma visualização com direitos do definidor, para consultar a visualização, a função do banco de dados ou O usuário só precisa do privilégio SELECT na visualização. Para mais informações, consulte Visão geral das visualizações.
Alterar streams
É possível conceder SELECT em fluxo de alterações. Você também precisa conceder EXECUTE no função de leitura associada a um fluxo de alterações. Para mais informações, consulte Controle de acesso refinado para fluxos de alterações.
Sequências
É possível conceder SELECT e UPDATE em sequências. Para mais informações, consulte Controle de acesso refinado para sequências.
Modelos
É possível conceder EXECUTE em modelos. Para mais informações, consulte Controle de acesso detalhado para modelos.

Papéis de sistema de controle de acesso granular

O controle de acesso detalhado tem papéis de sistema predefinidos para cada banco de dados. Assim como os papéis de banco de dados definidos pelo usuário, os papéis do sistema podem controlar o acesso aos os recursos do Spanner.

Por exemplo, um usuário de controle de acesso detalhado precisa receber a permissão spanner_sys_reader função do sistema para acessar o Key Visualizer e precisa do sistema spanner_info_reader para ver resultados não filtrados ao consultar as INFORMATION_SCHEMA tabelas.

Para mais informações, consulte Papéis refinados do sistema de controle de acesso.

Hierarquias e herança de funções de banco de dados

É possível criar hierarquias de papéis de banco de dados, em que papéis filhos herdam os privilégios das funções pai. Os papéis filhos são conhecidos como membros o papel pai.

Por exemplo, considere as seguintes instruçõ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 herdam o privilégio SELECT em employees.

Não há limites para a profundidade das hierarquias de função, mas a performance da consulta pode ser prejudicada com estruturas de hierarquia de função profundas e amplas.

Backup e restauração

Os backups do Spanner incluem definições de papel de banco de dados. Quando um banco de dados é restaurado no backup, os papéis dele são recriadas com os privilégios concedidos. No entanto, as políticas do IAM não fazem parte dos backups de banco de dados. Portanto, é necessário conceder novamente o acesso a papéis de banco de dados aos principais no banco de dados restaurado.

Informações gerais sobre como configurar o controle de acesso granular

Confira a seguir as etapas de alto nível para começar proteger os dados com controle de acesso refinado. Para mais detalhes, consulte Configure um controle de acesso detalhado.

Você precisa receber os papéis do IAM roles/spanner.admin ou roles/spanner.databaseAdmin para realizar essas tarefas.

  1. Criar papéis de banco de dados e conceder privilégios a eles.
  2. Opcional: crie hierarquias de função com herança concedendo papéis a outras funções.
  3. Execute estas etapas para cada principal que for um usuário refinado de controle de acesso:
    1. Ative o controle de acesso granular para o principal. O principal recebe automaticamente o papel de banco de dados public, que não tem privilégios por padrão. Essa operação só precisa ser realizada uma vez principal.
    2. Conceder permissões do IAM a um ou mais de banco de dados ao principal.
    3. Depois que o principal recebe todos os papéis de banco de dados necessários, se o principal tiver papéis do IAM no nível do banco de dados, revogue os papéis no nível do banco de dados para que o controle de acesso do principal seja gerenciado por apenas um método.

Limitações

  • As operações de exportação não exportam funções e privilégios do banco de dados, e as operações de importação não podem importá-los. É preciso configurar manualmente as funções e os privilégios depois que a importação for concluída.
  • A guia Dados na página TABELA do console do Google Cloud não está disponível para usuários com controle de acesso detalhado.

A seguir

Consulte os tópicos a seguir para mais informações: