Controle de acesso minucioso para fluxo de alterações

Esta página explica como o controle de acesso granular funciona com fluxo de alterações do Spanner para bancos de dados com dialeto GoogleSQL e PostgreSQL.

Para usuários com controle de acesso granular, permita o acesso de leitura aos dados de fluxo de alterações usando as seguintes concessões. As duas concessões são obrigatórias.

  • Conceda SELECT no stream de alterações.

    GoogleSQL

    GRANT SELECT ON CHANGE STREAM CHANGE_STREAM_NAME TO ROLE ROLE_NAME;

    PostgreSQL

    GRANT SELECT ON CHANGE STREAM CHANGE_STREAM_NAME TO ROLE_NAME;
  • Conceda EXECUTE na função de leitura criada automaticamente para o stream de alterações. Use a função de leitura para ler registros de streams de alterações.

    GoogleSQL

    GRANT EXECUTE ON TABLE FUNCTION READ_FUNCTION_NAME TO ROLE ROLE_NAME;

    PostgreSQL

    GRANT EXECUTE ON FUNCTION READ_FUNCTION_NAME TO ROLE_NAME;

    Para informações sobre convenções de nomenclatura para funções de leitura de streams de alterações e formatação das informações retornadas, consulte os seguintes tópicos:

Visualizações INFORMATION_SCHEMA para fluxo de alterações

As visualizações a seguir mostram informações sobre papéis e privilégios de banco de dados para streams de alterações:

As linhas nessas visualizações são filtradas com base nos privilégios de papel do banco de dados atual em fluxo de alterações. Isso garante que os principais só possam visualizar os papéis, privilégios e fluxo de alterações a que têm acesso.

A filtragem de linhas também se aplica às seguintes visualizações relacionadas a fluxo de alterações:

GoogleSQL

O papel do sistema spanner_info_reader e os membros dele sempre veem um INFORMATION_SCHEMA não filtrado.

PostgreSQL

O papel do sistema spanner_info_reader e os membros dele veem um information_schema não filtrado.

A filtragem de linhas também se aplica às seguintes visualizações de metadados para funções de leitura de streams de alterações:

Advertências

  • Os fluxos de alterações usam um banco de dados de metadados para manter o estado interno. O banco de dados de metadados pode ser igual ou diferente do banco de dados do aplicativo. Recomendamos que você use um banco de dados diferente. No entanto, para usuários com controle de acesso granular, o banco de dados de metadados não pode ser o mesmo que o banco de dados do aplicativo. Isso ocorre porque o principal do IAM que executa o job do Dataflow precisa de acesso de leitura ou gravação no nível do banco de dados para o banco de dados de metadados. Isso substituiria os privilégios de controle de acesso granular configurados para o banco de dados do aplicativo.

    Para mais informações, consulte Considerar um banco de dados de metadados separado.

  • Como um stream de alterações contém uma cópia separada dos dados das tabelas e colunas rastreadas, tenha cuidado ao conceder acesso de usuários ao stream de alterações. Os leitores do stream de alterações podem visualizar as mudanças de dados das tabelas e colunas rastreadas, mesmo quando não têm privilégios SELECT nas tabelas e colunas. Embora seja mais flexível configurar controles separados em fluxo de alterações e nas tabelas e colunas rastreadas, há um risco potencial. Portanto, verifique se você estruturou os papéis e privilégios do banco de dados de acordo. Por exemplo, ao revogar o privilégio SELECT em uma tabela de um papel, considere se também é necessário revogar SELECT no stream de alterações e EXECUTE na função de leitura associada.

  • Se você conceder SELECT em um stream de alterações que rastreia todas as tabelas, o beneficiário poderá ver as mudanças de dados de todas as tabelas adicionadas no futuro.

A seguir