Visão geral de 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 referente à visualização é executada, as visualizações às vezes são chamadas de visualizações lógicas ou dinâmicas para distingui-las de visualizações materializadas 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 solicitante ou uma visualização de direitos do definidor. São os dois tipos de modelos de segurança que controlam o acesso de usuários a uma vista.

Visualizações dos direitos do invocadorVisualizações dos direitos do definidor
Descrição Se você criar uma visualização com os direitos do invocador, um papel de banco de dados precisará de privilégios na visualização e em todos os objetos de esquema que a visualização referencia para consultá-la. Para mais informações, consulte Visualizações de direitos do invocador. Se você criar uma visualização com direitos do definidor, um papel de banco de dados precisará de privilégios na visualização (e somente nela) para consultá-la. Use o controle de acesso refinado junto com a visualização de direitos do definidor. Caso contrário, essa visualização não adicionará nenhum controle de acesso extra. Para mais informações, consulte Visualizações dos direitos do definidor.
Permissões necessárias para criar a visualização Para criar, conceder e revogar o acesso a esses 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 consultar a visualização e todos os objetos de esquema subjacentes para consultá-la. Um papel de banco de dados precisa de privilégios para a visualização (e somente para ela) para consultá-la.

Benefícios das visualizações

As visualizações oferecem vários benefícios em comparação com a inclusão das 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ísicos no Spanner não são a melhor abstração para os 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 e garante que as alterações de esquema nos objetos (tabelas, colunas etc.) 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 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 a que a visualização faz referência, crie a 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 referenciados pela visualização, crie uma visualização de direitos do definidor. As visualizações de direitos do definidor são mais bem protegidas e têm mais restrições, já que o administrador do banco de dados pode fornecer a 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 de conta pessoal (por exemplo, cliente do aplicativo).
  • Dados específicos da função (por exemplo, equipe de RH, representante de vendas).
  • Dados específicos de local.

Visualizações dos 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 do definidor adiciona outras funcionalidades de segurança à visualização. Ela fornece privilégios diferentes 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 do definidor, o Spanner verifica se o papel tem acesso à própria visualização (e somente à 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 conferir o conteúdo dela. Com as visualizações de direitos do definidor, os usuários têm acesso a novos dados, 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 refinado junto com a visualização de direitos do definidor. Caso contrário, essa visualização 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ão 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 de controle de acesso detalhado com o privilégio SELECT na visualização e os usuários com permissões no nível do banco de dados poderão consultá-la. A diferença é que o usuário de controle de acesso detalhado 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 a 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 do 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 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 visualização QualifiedStudentScores a seguir, que retorna pontuações de alunos que se qualificam para um curso. Os critérios de qualificação são baseados no nível e na nota do exame do aluno. Se o nível do estudante for igual ou menor que seis, a pontuação importa e o aluno precisa ter 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 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 aluno 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 nesse 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