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 à visualização é executada, as visualizações às vezes são chamadas de visualizações lógicas ou dinâmicas para distingui-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 a visualização de direitos do invocador ou a 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 dos direitos do definidor
Descrição Se você criar uma visualização com direitos do invocador, um papel de banco de dados precisará de privilégios na visualização e em todos os objetos de esquema aos quais a visualização faz referência 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 definidor, um papel de banco de dados precisará de privilégios na visualização (e apenas na visualização) para consultá-la. Use o controle de acesso refinado com a visualização de direitos do definidor. Caso contrário, essa visualização não vai adicionar nenhum controle de acesso. Para mais informações, consulte Visualizações de direitos do definidor.
Permissões necessárias para criar a visualização Para criar, conceder e revogar o acesso a qualquer um dos tipos de visualização, você precisa 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 consultá-la. Um papel de banco de dados precisa de privilégios para consultar a visualização, e apenas a visualização.

Benefícios das visualizações

As visualizações oferecem vários benefícios em relação à inclusão das consultas definidas 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ísicos 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 pode garantir que as alterações de esquema nos objetos (tabelas, colunas e assim por diante) 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 podem 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 outras funcionalidades de segurança e todos os invocadores da visualização tiverem acesso a todos os objetos de esquema aos quais a visualização faz referência, crie a visualização de direitos de um invocador.

Se você quiser criar uma visualização em que nem todos os invocadores tenham acesso a todos os objetos de esquema aos quais a visualização faz referência, 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 menos usuários com privilégios 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, talvez você queira criar uma visualização de direitos do definidor para os seguintes dados:

  • Dados da conta pessoal (por exemplo, cliente do aplicativo).
  • Dados específicos de funções (por exemplo, equipe de RH, representante de vendas).
  • Dados específicos do local.

Visualizações de direitos do invocador

Se uma visualização tiver os direitos do invocador, isso significa que, quando um usuário, o invocador, executa uma consulta na visualização, o Spanner verifica os privilégios do usuário na visualização e em todos os objetos de esquema aos quais a visualização faz referência. O usuário precisa ter privilégios em todos os objetos de esquema para consultar a visualização.

Visualizações dos direitos do definidor

A visualização de direitos de definição adiciona uma funcionalidade de segurança adicional à visualização. Ela fornece 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 as visualizações de direitos do definidor. A principal diferença é que, quando um papel de banco de dados consulta a visualização de direitos de um definidor, o Spanner verifica se o papel tem acesso à própria visualização (e apenas à visualização). Portanto, mesmo que o usuário que consulta a visualização não tenha acesso a todos os objetos de esquema subjacentes, ele poderá acessar a visualização e ver o conteúdo dela. As visualizações de direitos do definidor dão aos usuários acesso a dados atualizados, 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 adicionará nenhum controle de acesso extra. 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 detalhado no banco de dados, os usuários 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 detalhado não precisa de privilégios nos objetos.

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.

  • 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 a visualização de direitos de um 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 faz com que o Spanner gere um erro que mostre ou revele 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 visualização QualifiedStudentScores a seguir, que retorna pontuações de alunos qualificados para um curso. Os critérios de qualificação são baseados no nível e na pontuação do exame do estudante. Se o nível do aluno for igual ou inferior a seis, a pontuação será importante, e o aluno precisará obter pelo menos 50 pontos no exame para se qualificar. Caso contrário, para níveis igual 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 na forma 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 houver um estudante no nível 7 que tenha 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