Visão geral do controle de acesso detalhado

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

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

O acesso aos recursos para usuários que não são usuários de controle de acesso refinados é regido por papéis no nível do banco de dados do IAM. O controle de acesso detalhado é totalmente compatível e pode coexistir com o controle de acesso atual no nível do banco de dados do IAM. É possível usá-lo para acessar objetos de banco de dados individuais. Para controlar o acesso a todo o banco de dados, use papéis do IAM.

Com o controle de acesso refinado, você controla o acesso a tabelas, colunas, visualizações e fluxo de alterações.

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 de banco de dados são coleções de privilégios. É possível criar até 100 papéis para um banco de dados.
  • Instruções GRANT e REVOKE para conceder e revogar privilégios de e para papéis de banco de dados. Os privilégios incluem SELECT, INSERT, UPDATE, DELETE e EXECUTE. Os nomes de privilégios correspondem às instruções SQL com nomes semelhantes. Por exemplo, um papel com o privilégio INSERT pode executar a instrução SQL INSERT nas tabelas especificadas na instrução GRANT.

    As instruções DDL a seguir concedem SELECT na tabela employees ao papel de 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 a 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 papéis, com herança de privilégios.

Casos de uso

Confira a seguir exemplos de casos de uso para controle de acesso detalhado:

  • Um sistema de informações de RH com funções de analista de remuneração de vendas, gerenciamento de vendas e analista de RH, cada uma com níveis de acesso diferentes aos dados. Por exemplo, analistas de remuneração e gestão de vendas não devem ver números de previdência social.
  • Um aplicativo de compartilhamento de viagens com diferentes contas de serviço e privilégios para passageiros e motoristas.
  • Um livro razão que permite operações SELECT e INSERT, mas não UPDATE e DELETE.

Recursos do Spanner e seus privilégios

Veja a seguir uma lista de recursos do Spanner e os privilégios de controle de acesso detalhados 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 apropriados sobre a tabela?

Não: recusar o acesso.

Sim, você pode acessar a tabela.

Tabelas
É possível conceder os privilégios SELECT, INSERT, UPDATE e DELETE nas tabelas aos papéis de banco de dados. Para tabelas intercaladas, um privilégio concedido na tabela pai não se propaga para a tabela filha.
Colunas
É possível conceder SELECT, INSERT e UPDATE em um subconjunto de colunas em uma tabela. Assim, o privilégio é válido apenas para essas colunas. DELETE não é permitido no nível da coluna.
Visualizações
Você pode conceder privilégio a SELECT em uma visualização. Somente SELECT é compatível com visualizações. O Spanner é compatível com visualizações de direitos do invocador e visualizações de direitos do definidor. Se você criar uma visualização com direitos do invocador, para consultá-la, o papel do banco de dados ou o usuário precisará do privilégio SELECT na visualização e do privilégio SELECT nos objetos subjacentes mencionados na visualização. Se você criar uma visualização com direitos de definição, a função do banco de dados ou o usuário só precisará do privilégio SELECT na visualização para consultá-la. Para mais informações, consulte Visão geral de visualizações.
Alterar streams
É possível conceder SELECT em fluxo de alterações. Você também precisa conceder EXECUTE na função de leitura associada a um fluxo de alterações. Para mais informações, consulte Controle de acesso detalhado para fluxos de alterações.
Sequências
É possível conceder SELECT e UPDATE em sequências. Para mais informações, consulte Controle de acesso detalhado para sequências.
Modelos
É possível conceder EXECUTE nos modelos. Para mais informações, consulte Controle de acesso refinado 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 recursos do Spanner.

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

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

Herança e hierarquias de papéis do banco de dados

É possível criar hierarquias de papéis de banco de dados em que os papéis filhos herdam os privilégios dos pais. Os papéis filhos são conhecidos como membros do 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 do papel 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 há limites para a profundidade das hierarquias de papéis, mas o desempenho da consulta pode diminuir com estruturas profundas e amplas.

Backup e restauração

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

Visão geral da configuração de um controle de acesso detalhado

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

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

  1. Criar papéis de banco de dados e conceder privilégios a eles.
  2. Opcional: crie hierarquias de papéis com herança concedendo papéis a outros papéis.
  3. Execute estas etapas para cada principal que for um usuário refinado de controle de acesso:
    1. Ative o controle de acesso detalhado 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 para cada principal.
    2. Conceda permissões do IAM em um ou mais papéis de banco de dados ao principal.
    3. Depois que o principal receber todos os papéis de banco de dados necessários, se ele 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 papéis e privilégios do banco de dados, e as operações de importação não podem importá-los. Será preciso configurar as funções e privilégios manualmente após a conclusão da importação.
  • A guia Dados na página TABELA no Console do Google Cloud não está disponível para usuários de controle de acesso detalhado.
  • As operações UPDATE e DELETE exigem SELECT em todas as colunas de chave.

A seguir

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