O controle de acesso refinado 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 de acesso refinado com o Spanner para bancos de dados de dialeto do GoogleSQL e do PostgreSQL.
Como administrador, você precisa ativar o controle de acesso refinado para principais individuais do IAM. Os principais com o controle de acesso refinado 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 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. É possível usá-lo para acessar objetos de banco de dados individuais. Para controlar o acesso a todo o banco de dados, use os 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 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
GRANTeREVOKEpara conceder e revogar privilégios de papéis de banco de dados. Os privilégios incluemSELECT,INSERT,UPDATE,DELETEeEXECUTE. Os nomes de privilégios correspondem às instruções SQL de mesmo nome. Por exemplo, um papel 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 refinado.
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 o controle de acesso refinado:
- Um sistema de informações de RH que tem papéis para analista de remuneração de vendas, gerenciamento 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 devem ver CPFs ou CNPJs.
- Um aplicativo de transporte por aplicativo com diferentes contas de serviço e privilégios para passageiros e motoristas.
- Um livro que permite operações
SELECTeINSERT, mas não operaçõesUPDATEeDELETE.
Recursos do Spanner e os privilégios deles
Veja a seguir uma lista de recursos do Spanner e os privilégios de controle de acesso refinado que podem ser concedidos a eles.
- Esquemas
- É possível conceder o privilégio
USAGEem esquemas a papéis de banco de dados específicos. Para um esquema não padrão, os papéis do banco de dados precisam ter o privilégioUSAGEpara acessar os objetos do banco de dados. A verificação de privilégios é semelhante a esta:
Você tem USAGE no esquema?
Não: recusar o acesso.
Sim: você também tem os direitos apropriados na tabela?
Não: recusar o acesso.
Sim: você pode acessar a tabela.
- Tabelas
- É possível conceder os privilégios
SELECT,INSERT,UPDATEeDELETEem tabelas para papéis do 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,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
- É possível conceder o privilégio
SELECTem uma visualização. SomenteSELECTé compatível com visualizações. O Spanner é compatível com as visualizações de direitos do invocador e do definidor. Se você criar uma visualização com direitos de invocador, para consultar a visualização, o papel ou 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 de definidor, para consultar a visualização, o papel ou o usuário do banco de dados precisará apenas do privilégioSELECTna visualização. Para mais informações, consulte Visão geral das visualizações. - Fluxo de alterações
- É possível conceder
SELECTem fluxo de alterações. Também é necessário concederEXECUTEna 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
SELECTeUPDATEem sequências. Para mais informações, consulte Controle de acesso refinado para sequências. - Modelos
- É possível conceder
EXECUTEem modelos. Para mais informações, consulte Controle de acesso refinado para modelos.
Papéis do sistema de controle de acesso refinado
O controle de acesso refinado 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 do sistema spanner_sys_reader para acessar o Key Visualizer e o papel do 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 refinado.
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 pai. 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.

hr_manager e hr_director também podem ter membros, que herdam o privilégio SELECT em employees.
Não há limites para a profundidade das hierarquias de papéis, mas o desempenho da consulta pode ser prejudicado com estruturas de hierarquia de papéis profundas e amplas.
Backup e restauração
Os backups do Spanner incluem definições de papel do banco de dados. Quando um banco de dados é restaurado do backup, os papéis do banco de dados são recriados com os privilégios concedidos. No entanto, as políticas do IAM não fazem parte dos backups do 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 refinado
Confira a seguir as etapas gerais para começar a proteger dados com o controle de acesso refinado. Para mais detalhes, consulte Configurar o controle de acesso refinado.
Você precisa receber os papéis do IAM roles/spanner.admin ou roles/spanner.databaseAdmin para realizar essas tarefas.
- Criar papéis de banco de dados e conceder 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 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.
- 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 papéis e privilégios de banco de dados, e as operações de importação não podem importá-los. Você precisa configurar manualmente os papéis e privilégios depois que a importação for concluída.
- A guia Dados na página TABELA no console do Google Cloud não está disponível para usuários de controle de acesso refinado.
A seguir
- Acessar um banco de dados com controle de acesso refinado
- Controle de acesso refinado para fluxos de alterações
- Configurar o controle de acesso refinado
- Referência de privilégios de controle de acesso refinado
- 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