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 participantes do IAM.
Como administrador, você precisa ativar o controle de acesso granular para principais do IAM individuais. Os principais que têm o controle de acesso granular ativado ("usuários de controle de acesso granular") precisam assumir um papel de 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 detalhado é totalmente compatível e pode coexistir com o controle de acesso no nível do banco de dados do IAM. Você pode usá-lo para acessar objetos individuais do banco de dados. Para controlar o acesso a todo o banco de dados, use os papéis do IAM.
Com o controle de acesso detalhado, é 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
CREATE
eDROP
para criar e excluir funções do 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
eREVOKE
para conceder e revogar privilégios para e de funções do banco de dados. Os privilégios incluemSELECT
,INSERT
,UPDATE
,DELETE
eEXECUTE
. Os nomes de privilégio correspondem às instruções SQL com nomes semelhantes. Por exemplo, uma função com o privilégioINSERT
pode executar a instrução SQLINSERT
nas tabelas que são especificadas na instruçãoGRANT
.As instruções DDL a seguir concedem
SELECT
na tabelaemployees
ao papel do 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.
Declarações
GRANT
para 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 alguns exemplos de casos de uso para o controle de acesso refinado:
- Um sistema de informações de RH que tem funções para analista de remuneraçã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 ver 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
eINSERT
, mas não operaçõesUPDATE
eDELETE
.
Recursos do Spanner e os privilégios deles
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 funções específicas do banco de dados. Para um esquema não padrão, os papéis do banco de dados precisam ter o privilégioUSAGE
para acessar os objetos do banco de dados. A verificação de privilégios é semelhante a esta:
Você tem USAGE
no esquema?
Não: recuse o acesso.
Sim: você também tem os direitos adequados na tabela?
Não: recuse o acesso.
Sim: você pode acessar a tabela.
- Tabelas
- É possível conceder os privilégios
SELECT
,INSERT
,UPDATE
eDELETE
em tabelas para papéis do banco de dados. Para tabelas intercaladas, um privilégio concedido na tabela mãe não se propaga para a tabela filha. - Colunas
- É possível conceder
SELECT
,INSERT
eUPDATE
em um subconjunto de colunas em uma tabela. O privilégio é válido apenas para essas colunas.DELETE
não é permitido no nível da coluna. - Visualizações
- É possível conceder o privilégio
SELECT
em uma visualização. SomenteSELECT
é aceito para visualizações. O Spanner oferece suporte às visualizações de direitos do autor 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 do privilégioSELECT
na visualização e também do privilégioSELECT
nos objetos subjacentes referenciados na visualização. Se você criar uma visualização com direitos de definição, para consultar a visualização, o papel do banco de dados ou o usuário só precisará do privilégioSELECT
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 concederEXECUTE
na função de leitura associada a um fluxo de alterações. Para mais informações, consulte Controle de acesso granular para fluxos de alteração. - Sequências
- É possível conceder
SELECT
eUPDATE
em sequências. Para mais informações, consulte Controle de acesso detalhado para sequências. - Modelos
- É possível conceder
EXECUTE
em modelos. Para mais informações, consulte Controle de acesso detalhado para modelos.
Papéis do sistema de controle de acesso granular
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, as funções do sistema podem controlar o acesso aos recursos do Spanner.
Por exemplo, um usuário de controle de acesso detalhado precisa receber a função de sistema spanner_sys_reader
para acessar o Key Visualizer e precisa da função 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 do sistema de controle de acesso detalhado.
Hierarquias e herança de papéis de banco de dados
É possível criar hierarquias de funções de banco de dados, em que as funções filhas herdam os privilégios das funções mãe. As funções filhas são conhecidas como membros da função mãe.
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 herdariam
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 de um backup, as funções do 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 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 gerais para começar a proteger os 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 funções de banco de dados e conceda privilégios a elas.
- Opcional: crie hierarquias de função com herança concedendo funções a outras funções.
- Siga estas etapas para cada principal que será um usuário de controle de acesso granular:
- Ative o controle de acesso detalhado para o principal.
O participante 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 do 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 detalhado para o principal.
O participante 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. É necessário configurar manualmente as funções e os privilégios depois que a importação for concluída.
- A guia Dados na página TABELA no console Google Cloud não está disponível para usuários de controle de acesso detalhado.
A seguir
Consulte os tópicos a seguir para mais informações:
- Acessar um banco de dados com controle de acesso granular
- Controle de acesso granular para streams de alteração
- Configurar o controle de acesso granular
- Referência de privilégios de controle de acesso granular
- Papéis do sistema de controle de acesso granular
- Instruções
GRANT
eREVOKE
do GoogleSQL - Instruções
GRANT
eREVOKE
do PostgreSQL - Controle de acesso granular para sequências
- Controle de acesso granular para modelos