O controle de acesso refinado do Spanner combina os benefícios do Identity and Access Management (IAM) com o controle de acesso tradicional baseado em papéis do SQL. 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. As principais em que o controle de acesso detalhado está ativado ("usuários de controle de acesso detalhado") 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 no nível do banco de dados do IAM. O controle de acesso refinado é totalmente compatível e pode coexistir com o controle de acesso existente no nível do banco de dados do IAM.
Com um 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 detalhado, use as seguintes instruções DDL:
- Instruções
CREATE
eDROP
para criar e descartar papéis de bancos 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
eREVOKE
para conceder e revogar privilégios de e para papéis de banco de dados. Os privilégios incluemSELECT
,INSERT
,UPDATE
,DELETE
eEXECUTE
. Os nomes de privilégios correspondem às instruções SQL com nomes semelhantes. Por exemplo, um papel com o privilégioINSERT
pode executar a instrução SQLINSERT
nas tabelas especificadas na instruçãoGRANT
.As instruções DDL a seguir concedem
SELECT
na tabelaemployees
ao 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 refinados.
Instruções
GRANT
para conceder papéis a outros e criar hierarquias de papéis, com herança de privilégios.
Casos de uso
Veja a seguir exemplos de casos de uso para controle de acesso detalhado:
- 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 diferentes níveis de acesso aos dados. Por exemplo, analistas de remuneração e gerentes de vendas não podem ter acesso a 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 as operações
SELECT
eINSERT
, mas não as operaçõesUPDATE
eDELETE
.
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 refinados que você pode conceder a eles.
- Tabelas
- É possível conceder os privilégios
SELECT
,INSERT
,UPDATE
eDELETE
nas tabelas a papéis de banco de dados. No caso de tabelas intercaladas, um privilégio concedido na tabela pai não é propagado para a tabela filha. - Colunas
- É possível conceder
SELECT
,INSERT
eUPDATE
em um subconjunto de colunas de uma tabela. O privilégio é então válido apenas para essas colunas.DELETE
não é permitido no nível da coluna. - Visualizações
- Você pode conceder o privilégio
SELECT
em uma visualização. ApenasSELECT
é compatível com visualizações. O Spanner oferece suporte às visualizações de direitos do invocador e às visualizações de direitos do definidor. Se você criar uma visualização com direitos de invocador, para consultá-la, o papel ou usuário do banco de dados precisará 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 definidor, para consultar a visualização, o papel ou o usuário do banco de dados só precisará do privilégioSELECT
na visualização. Para mais informações, consulte Visão geral de visualizações. - Alterar streams
- Você pode 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 refinado para fluxos de mudanças. - Sequências
- Você pode conceder
SELECT
eUPDATE
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 refinado para modelos.
Papéis granulares do sistema de controle de acesso
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 precisa do 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 refinado.
Hierarquias de papéis do banco de dados e herança
É possível criar hierarquias de papéis de bancos 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, 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 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. Por isso, é necessário conceder novamente aos principais acesso aos papéis do banco de dados aos principais no banco de dados restaurado.
Visão geral da configuração de controle de acesso refinados
Confira a seguir as etapas avançadas para começar a proteger os dados com controle de acesso detalhado. Saiba mais em Configurar controle de acesso detalhado.
Você precisa receber os papéis do IAM roles/spanner.admin
ou
roles/spanner.databaseAdmin
para executar essas tarefas.
- Crie funções de banco de dados e conceda privilégios aos papéis.
- Opcional: crie hierarquias de papéis com herança atribuindo papéis a outros.
- Siga estas etapas para cada principal que precisa ser um usuário de controle de acesso detalhado:
- 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 é 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 o principal 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 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 de banco de dados, e as operações de importação não podem importá-las. Configure manualmente papéis e privilégios após a conclusão da importação.
- A guia Dados na página TABELA do console do Google Cloud não está disponível para usuários de controle de acesso detalhado.
- As operações
UPDATE
eDELETE
exigemSELECT
em todas as colunas de chave.
A seguir
Consulte os tópicos a seguir para mais informações:
- Controle de acesso refinado para fluxos de alteração
- Configurar um controle de acesso detalhado
- Referência de privilégios de controle de acesso refinados
- Papéis granulares do sistema de controle de acesso
- Instruções
GRANT
eREVOKE
do GoogleSQL - Instruções
GRANT
eREVOKE
do PostgreSQL - Controle de acesso refinado para sequências
- Controle de acesso refinado para modelos