O controle de acesso granular do Spanner combina os benefícios do Identity and Access Management (IAM) com o controle de acesso baseado em papéis 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. Nesta página, descrevemos como usar o controle granular de acesso com o Spanner para bancos de dados com dialeto GoogleSQL e PostgreSQL.
Como administrador, você precisa ativar o controle de acesso granular para principais individuais do IAM. Os principais para quem o controle de acesso granular está ativado ("usuários de controle de acesso granular") precisam assumir uma função de banco de dados para acessar recursos do Spanner.
O acesso a recursos para usuários que não usam o controle de acesso refinado é regido por papéis do IAM no nível do banco de dados. O controle de acesso refinado é totalmente compatível e pode coexistir com o controle de acesso no nível do banco de dados do IAM. Você pode usar esse recurso 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, é possível controlar 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
CREATEeDROPpara criar e excluir 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
GRANTeREVOKEpara conceder e revogar privilégios de e para papéis de banco de dados. Os privilégios incluemSELECT,INSERT,UPDATE,DELETEeEXECUTE. Os nomes de privilégios correspondem às instruções SQL com o mesmo nome. Por exemplo, uma função com o privilégioINSERTpode executar a instrução SQLINSERTnas tabelas especificadas na instruçãoGRANT.As instruções DDL a seguir concedem
SELECTna tabelaemployeesao papel de banco 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 Referência de privilégios de controle de acesso detalhado.
Instruções
GRANTpara conceder papéis a outros papéis e criar hierarquias de papéis, com herança de privilégios.
Casos de uso
Confira a seguir exemplos de casos de uso para controle granular de acesso:
- Um sistema de informações de RH com 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, analistas de remuneração e gerentes de vendas não podem ver números de previdência social.
- Um aplicativo de carona compartilhada com diferentes contas de serviço e privilégios para passageiros e motoristas.
- Um razão que permite operações
SELECTeINSERT, mas nãoUPDATEeDELETE.
Recursos do Spanner e privilégios deles
Confira a seguir uma lista de recursos do Spanner e os privilégios de controle de acesso granular que podem ser concedidos a eles.
- Esquemas
- É possível conceder o privilégio
USAGEem esquemas a funções específicas do banco de dados. Para um esquema não padrão, os papéis de banco de dados precisam ter o privilégioUSAGEpara acessar os objetos do banco de dados. A verificação de privilégios é assim:
Você tem USAGE no esquema?
Não: rejeite o acesso.
Sim: você também tem os direitos adequados na tabela?
Não: rejeite o acesso.
Sim: você pode acessar a tabela.
- Tabelas
- É possível conceder os privilégios
SELECT,INSERT,UPDATEeDELETEem tabelas para papéis de banco de dados. Para tabelas intercaladas, um privilégio concedido na tabela mãe não é propagado para a tabela filha. - Colunas
- É possível conceder
SELECT,INSERTeUPDATEem um subconjunto de colunas em uma tabela. O privilégio é válido apenas para essas colunas.DELETEnão é permitido no nível da coluna. - Visualizações
- Você pode conceder o privilégio
SELECTem uma visualização. SomenteSELECTé aceito para visualizações. O Spanner é compatível com visualizações de direitos do invocador e do definidor. Se você criar uma visualização com direitos do invocador, para consultar a visualização, a função ou o usuário do banco de dados precisará do privilégioSELECTna visualização e também do privilégioSELECTnos objetos subjacentes referenciados na visualização. Se você criar uma visualização com direitos do definidor, para consultar a visualização, a função ou o usuário do banco de dados só precisará do privilégioSELECTna visualização. Para mais informações, consulte Visão geral das visualizações. - Alterar streams
- É possível conceder
SELECTem fluxo de alterações. Você também precisa concederEXECUTEna função de leitura associada a um fluxo de alterações. Para mais informações, consulte Controle de acesso minucioso para streams de alteração. - Sequências
- Você pode conceder
SELECTeUPDATEem sequências. Para mais informações, consulte Controle de acesso minucioso para sequências. - Modelos
- É possível conceder
EXECUTEem modelos. Para mais informações, consulte Controle de acesso minucioso para modelos.
Funções do sistema de controle de acesso refinado
O controle de acesso detalhado tem papéis do 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 refinado precisa receber o papel de sistema spanner_sys_reader
para acessar o Key Visualizer e o papel de sistema spanner_info_reader
para ver resultados não filtrados ao consultar as tabelas
INFORMATION_SCHEMA.
Para mais informações, consulte Papéis do sistema de controle de acesso minucioso.
Hierarquias e herança de papéis de 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 papéis principais. Os papéis secundários são conhecidos como membros do papel principal.
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.

hr_manager e hr_director também podem ter participantes, que vão herdar 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 de banco de dados. Quando um banco de dados é restaurado de um backup, as funções de banco de dados 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 aos papéis do banco de dados aos principais no banco de dados restaurado.
Visão geral da configuração do controle de acesso granular
Confira abaixo as etapas gerais para começar a proteger dados com controle de acesso refinado. Para mais detalhes, consulte Configurar o controle de acesso detalhado.
Você precisa receber os papéis do IAM roles/spanner.admin ou roles/spanner.databaseAdmin para realizar essas tarefas.
- Crie papéis de banco de dados e conceda privilégios a eles.
- Opcional: crie hierarquias de papéis com herança concedendo papéis a outros papéis.
- Siga estas etapas para cada principal que será um usuário de controle de acesso refinado:
- Ative o controle de acesso refinado para o principal.
O principal recebe automaticamente o papel de banco de dados
public, que não tem privilégios por padrão. Essa é uma operação única para cada principal. - Conceda permissões do IAM em um ou mais papéis de banco de dados ao principal.
- 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, considere revogar esses papéis para que o controle de acesso do principal seja gerenciado por apenas um método.
- Ative o controle de acesso refinado para o principal.
O principal recebe automaticamente o papel de banco de dados
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. Você precisa 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 refinado.
A seguir
- Acessar um banco de dados com controle de acesso refinado
- Controle de acesso minucioso para streams de alteração
- Configurar o controle de acesso refinado
- Referência de privilégios de controle de acesso granular
- Papéis do sistema de controle de acesso refinado
- Instruções
GRANTeREVOKEdo GoogleSQL - Instruções
GRANTeREVOKEdo PostgreSQL - Controle de acesso refinado para sequências
- Controle de acesso refinado para modelos