Visão geral das visualizações

Neste tópico, apresentamos e descrevemos as visualizações do Spanner.

Visão geral

Uma visualização é uma tabela virtual definida por uma consulta SQL. Ao criar uma visualização, você especifica a consulta SQL que ela representa. Depois de criar uma visualização, é possível executar consultas que se referem a ela como se fosse uma tabela.

Quando uma consulta que se refere a uma visualização é executada, o Spanner cria a tabela virtual executando a consulta definida na visualização, e o conteúdo dessa tabela virtual é usado pela consulta de referência.

Como a consulta que define uma visualização é executada sempre que uma consulta que se refere a ela é executada, as visualizações às vezes são chamadas de lógicas ou dinâmicas para diferenciá-las das visualizações materializadas do SQL, que armazenam os resultados da consulta que define a visualização como uma tabela real no armazenamento de dados.

No Spanner, é possível criar uma visualização como uma visualização de direitos do invocador ou uma visualização de direitos do definidor. Eles são os dois tipos de modelos de segurança que controlam o acesso dos usuários a uma visualização.

Visualizações de direitos do invocadorVisualizações de direitos do definer
Descrição Se você criar uma visualização com direitos de invocação, uma função do banco de dados precisará de privilégios na visualização e em todos os objetos de esquema que ela referencia para consultar a visualização. Para mais informações, consulte Visualizações de direitos do invocador. Se você criar uma visualização com direitos de definição, uma função do banco de dados precisará de privilégios na visualização (e apenas nela) para consultar a visualização. Use o controle de acesso detalhado com a visualização de direitos do definidor. Caso contrário, a visualização de direitos do definidor não adiciona nenhum controle de acesso adicional. Para mais informações, consulte Visualizações de direitos do autor definidor.
Permissões necessárias para criar a visualização Para criar, conceder e revogar acesso a qualquer um dos tipos de visualização, é necessário ter a permissão spanner.database.updateDdl no nível do banco de dados.
Privilégios necessários para consultar a visualização Um papel de banco de dados precisa de privilégios para a visualização e todos os objetos de esquema subjacentes para consultar a visualização. Um papel de banco de dados precisa de privilégios para a visualização (e apenas a visualização) para consultar a visualização.

Benefícios das visualizações

As visualizações oferecem vários benefícios em comparação com as consultas que elas definem na lógica do aplicativo.

  • As visualizações podem oferecer modelagem de dados lógico para aplicativos.

    Às vezes, as escolhas que fazem sentido para a modelagem de dados físicas no Spanner não são a melhor abstração para aplicativos que leem esses dados. Uma visualização pode apresentar um esquema de tabela alternativo, que é uma abstração mais apropriada para aplicativos.

  • Visualizações centralizam definições de consulta e simplificam a manutenção.

    Ao criar visualizações para consultas amplamente utilizadas ou complexas, é possível fatorar o texto da consulta fora dos aplicativos e centralizá-lo. Isso torna muito mais simples manter o texto de consultas atualizado em todos os aplicativos e permite a revisão e o ajuste de consultas sem que o código do aplicativo seja alterado.

  • As visualizações oferecem estabilidade em todas as mudanças de esquema.

    Como a consulta que define uma visualização é armazenada no esquema do banco de dados e não na lógica do aplicativo, o Spanner garante que as mudanças feitas pelo esquema nos objetos (tabelas, colunas e assim por diante) a que a consulta se refere não invalidem a consulta.

Casos de uso comuns

Use visualizações quando o banco de dados do Spanner incluir dados altamente privilegiados que não devem ser expostos a todos os usuários do banco de dados ou se você quiser encapsular seus dados.

Se a visualização não precisar de mais funcionalidades de segurança e todos os invocadores da visualização tiverem acesso a todos os objetos de esquema que a visualização referencia, crie uma visualização de direitos do invocador.

Se você quiser criar uma visualização em que nem todos os invocadores tenham acesso a todos os objetos de esquema que a visualização referencia, crie uma visualização de direitos do definidor. As visualizações de direitos do definidor são mais protegidas e têm mais restrições porque o administrador do banco de dados pode fornecer privilégios a menos usuários nas tabelas e colunas referenciadas na visualização. As visualizações de direitos do definidor são úteis quando um usuário precisa de uma maneira de acessar com segurança um subconjunto relevante de um banco de dados do Spanner. Por exemplo, você pode criar uma visualização de direitos do definidor para os seguintes dados:

  • Dados de contas pessoais (por exemplo, cliente do aplicativo).
  • Dados específicos da função (por exemplo, pessoal de RH, representante de vendas).
  • Dados específicos do local.

Visualizações de direitos do invocador

Se uma visualização tiver direitos de invocação, isso significa que, quando um usuário, o invocador, executar uma consulta na visualização, o Spanner vai verificar os privilégios do usuário na visualização e em todos os objetos de esquema que a visualização referencia. O usuário precisa ter privilégios em todos os objetos do esquema para consultar a visualização.

Visualizações de direitos do definer

A visualização de direitos do definidor adiciona mais funcionalidades de segurança à visualização. Ele oferece diferentes privilégios na visualização e nos objetos de esquema subjacentes. Assim como nas visualizações de direitos do invocador, os usuários precisam ter permissões no nível do banco de dados para criar visualizações de direitos do definidor. A principal diferença é que, quando um papel do banco de dados consulta a visualização de direitos do definidor, o Spanner verifica se o papel tem acesso à própria visualização (e somente a ela). Portanto, mesmo que o usuário que consulta a visualização não tenha acesso a todos os objetos de esquema subjacentes, ele pode acessar a visualização e conferir o conteúdo dela. As visualizações de direitos do definidor dão aos usuários acesso a dados novos, limitados às linhas definidas na visualização.

As permissões do Identity and Access Management (IAM) do Spanner são concedidas no nível do banco de dados. Use o controle de acesso detalhado com a visualização de direitos do definidor. Caso contrário, a visualização de direitos do definidor não vai adicionar nenhum controle de acesso adicional. Isso ocorre porque, se o usuário tiver permissões de leitura no banco de dados, ele terá permissões de leitura em todos os objetos de esquema no banco de dados. Depois de configurar o controle de acesso granular no seu banco de dados, os usuários com controle de acesso granular com o privilégio SELECT na visualização e os usuários com permissões no nível do banco de dados podem consultar a visualização. A diferença é que o usuário do controle de acesso refinado não precisa de privilégios nos objetos subjacentes.

Limitações das visualizações

As visualizações têm limitações em comparação com tabelas reais que as tornam inadequadas para determinados casos de uso.

  • As visualizações são somente leitura. Não é possível usá-las para adicionar, atualizar ou excluir dados.

    Não é possível usar visualizações em instruções DML (INSERT, UPDATE, DELETE).

  • A consulta que define uma visualização não pode usar parâmetros de consulta.

  • Não é possível indexar visualizações.

  • As referências a visualizações não podem usar dicas de tabela.

    No entanto, a consulta que define uma visualização pode incluir dicas na tabela a que se refere.

  • As visualizações não são compatíveis com a API Read.

  • As visualizações de direitos do definidor não são compatíveis com o Data Boost do Spanner.

    A execução de uma consulta que contém uma visualização de direitos do definidor no Data Boost resulta em um erro.

  • O modo de consulta recomendado para acessar a visualização de direitos de um definidor é o modo NORMAL.

    Os usuários que não têm acesso aos objetos de esquema subjacentes da visualização de direitos de um definidor recebem um erro ao consultar em um modo de consulta diferente do normal.

  • É possível que um usuário crie uma consulta cuidadosamente elaborada que faça o Spanner gerar um erro que mostra ou revela a existência de dados que não estão disponíveis na visualização de direitos do definidor.

    Por exemplo, suponha que haja a seguinte visualização QualifiedStudentScores, que retorna as pontuações dos estudantes que se qualificam para um curso. Os critérios de qualificação são baseados no nível e na pontuação do exame do aluno. Se o nível do estudante for igual ou inferior a seis, a pontuação será importante, e o estudante terá que atingir pelo menos 50 pontos no exame para se qualificar. Caso contrário, para níveis iguais ou maiores que seis, o estudante se qualifica por padrão.

      CREATE VIEW QualifiedStudentScores
      SQL SECURITY DEFINER AS
      SELECT
        s.Name,
        s.Level,
        sc.Score
      FROM Students AS s
      JOIN Scores AS sc ON sc.StudentId = s.StudentId
      WHERE
      (CASE
        WHEN (s.Level < 6) OR (s.Level >= 6 AND sc.Score >= 50)
          THEN 'QUALIFIED';
        ELSE 'FAILED';
      END) = 'QUALIFIED';
    

    Um usuário pode executar uma consulta no formato de SELECT * FROM QualifiedStudentScores s WHERE s.Level = 7 AND 1/(s.Score - 20) = 1;. Essa consulta pode falhar com um erro de divisão por zero se um estudante no nível 7 tiver uma pontuação de 20 pontos, mesmo que a visualização limite os dados a 50 pontos ou mais para esse nível.

Desempenho da consulta ao usar visualizações

Uma consulta que se refere a uma visualização tem um desempenho comparável à mesma consulta, e a referência dela é substituída pela definição da visualização.

Cotas e limites que se aplicam a visualizações

  • A página Cotas e limites lista informações de cotas e limites especificamente para visualizações.

  • O uso de uma visualização em uma consulta pode afetar a conformidade dela com os limites da consulta, porque a definição da visualização se torna parte da consulta.

Impacto nos custos

O uso de visualizações tem um impacto muito pequeno no custo de uma instância:

  • O uso de visualizações não tem impacto nas necessidades de capacidade de computação de uma instância, em comparação com a incorporação do texto de consulta definido nas consultas que se referem a elas.

  • O uso de visualizações tem um impacto muito pequeno no armazenamento do banco de dados de uma instância, porque a tabela gerada pela execução da definição de consulta de uma visualização não é salva no armazenamento de banco de dados permanente.

A seguir