Vista geral das visualizações

Este documento apresenta e descreve as vistas do Spanner.

Vista geral

Uma vista é uma tabela virtual definida por uma consulta SQL. Quando cria uma vista, especifica a consulta SQL que representa. Depois de criar uma vista, pode executar consultas que se referem à vista como se fosse uma tabela.

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

Uma vez que a consulta que define uma vista é executada sempre que uma consulta que faz referência à vista é executada, as vistas são, por vezes, denominadas vistas lógicas ou vistas dinâmicas para as distinguir das vistas materializadas de SQL, que armazenam os resultados da consulta que define a vista como uma tabela real no armazenamento de dados.

No Spanner, pode criar uma vista como uma vista de direitos do invocador ou uma vista de direitos do definidor. São os dois tipos de modelos de segurança que controlam o acesso dos utilizadores a uma vista.

Vistas de direitos do autor da invocaçãoVisualizações dos direitos do definidor
Descrição Se criar uma vista com os direitos do invocador, uma função de base de dados precisa de privilégios na vista e em todos os objetos de esquema que a vista referencia para consultar a vista. Para mais informações, consulte o artigo Vistas de direitos do invocador. Se criar uma vista com os direitos do definidor, uma função da base de dados precisa de privilégios na vista (e apenas na vista) para consultar a vista. Use o controlo de acesso detalhado juntamente com a vista de direitos do definidor. Caso contrário, a vista de direitos do definidor não adiciona nenhum controlo de acesso adicional. Para mais informações, consulte o artigo Vistas de direitos do definidor.
Autorizações necessárias para criar a vista Para criar, conceder e revogar o acesso a qualquer um dos tipos de visualização, tem de ter a autorização spanner.database.updateDdl ao nível da base de dados.
Privilégios necessários para consultar a vista Uma função de base de dados precisa de privilégios para a vista e todos os respetivos objetos de esquema subjacentes para consultar a vista. Uma função de base de dados precisa de privilégios para a visualização (e apenas para a visualização) para consultar a visualização.

Vantagens das visualizações

As vistas oferecem várias vantagens em relação à inclusão das consultas que definem na lógica da aplicação.

  • As vistas podem fornecer modelagem de dados lógica às aplicações.

    Por vezes, as escolhas que fazem sentido para a modelagem de dados físicos no Spanner não são a melhor abstração para as aplicações que leem esses dados. Uma vista pode apresentar um esquema de tabela alternativo que seja uma abstração mais adequada para aplicações.

  • As vistas centralizam as definições de consultas e, por isso, simplificam a manutenção.

    Ao criar vistas para consultas complexas ou usadas com frequência, pode ter em conta o texto da consulta nas aplicações e centralizá-lo. Deste modo, é muito mais simples manter o texto da consulta atualizado em todas as aplicações e permite a revisão e o ajuste das consultas sem exigir a alteração do código da aplicação.

  • As vistas oferecem estabilidade nas alterações de esquemas.

    Uma vez que a consulta que define uma vista é armazenada no esquema da base de dados em vez de na lógica da aplicação, o Spanner pode e garante que as alterações ao esquema dos objetos (tabelas, colunas, etc.) a que a consulta se refere não invalidam a consulta.

Exemplos de utilização comuns

Use visualizações quando a sua base de dados do Spanner incluir dados altamente privilegiados que não devem ser expostos a todos os utilizadores da base de dados ou se quiser encapsular os seus dados.

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

Se quiser criar uma vista em que nem todos os invocadores têm acesso a todos os objetos de esquema aos quais a vista faz referência, crie uma vista de direitos do definidor. As vistas dos direitos do definidor estão mais protegidas e têm mais restrições porque o administrador da base de dados pode conceder privilégios a menos utilizadores nas tabelas e colunas referenciadas na vista. As vistas de direitos do definidor são úteis quando um utilizador precisa de uma forma de aceder em segurança a um subconjunto relevante de uma base de dados do Spanner. Por exemplo, pode querer criar uma visualização de propriedade dos direitos do definidor para os seguintes dados:

  • Dados de contas pessoais (por exemplo, cliente da aplicação).
  • Dados específicos da função (por exemplo, Pessoal de RH, vendedor).
  • Dados específicos da localização.

Vistas de direitos do autor da invocação

Se uma visualização de propriedade tiver os direitos do invocador, significa que, quando um utilizador, o invocador, executa uma consulta na visualização de propriedade, o Spanner verifica os privilégios do utilizador na visualização de propriedade e em todos os objetos de esquema que a visualização de propriedade referencia. O utilizador tem de ter privilégios em todos os objetos de esquema para consultar a vista.

Visualizações dos direitos do definidor

Uma vista de direitos do definidor adiciona funcionalidades de segurança adicionais à vista. Oferece diferentes privilégios na vista e nos objetos de esquema subjacentes. Tal como para as visualizações de direitos do invocador, os utilizadores têm de ter autorizações ao nível da base de dados para criar visualizações de direitos do definidor. A principal diferença é que, quando uma função de base de dados consulta uma vista de direitos do definidor, o Spanner verifica se a função tem acesso à própria vista (e apenas à vista). Por conseguinte, mesmo que o utilizador que consulta a vista não tenha acesso a todos os objetos de esquema subjacentes, pode aceder à vista e ver o respetivo conteúdo. Os direitos do definidor permitem que os utilizadores acedam a dados atualizados, limitados às linhas definidas na vista.

As autorizações da gestão de identidade e de acesso (IAM) do Spanner são concedidas ao nível da base de dados. Use o controlo de acesso detalhado juntamente com a vista de direitos do definidor. Caso contrário, a vista de direitos do definidor não adiciona qualquer controlo de acesso adicional. Isto deve-se ao facto de, se o utilizador tiver autorizações de leitura na base de dados, ter autorizações de leitura em todos os objetos de esquema na base de dados. Depois de configurar o controlo de acesso detalhado na sua base de dados, os utilizadores do controlo de acesso detalhado com o privilégio SELECT na visualização e os utilizadores com autorizações ao nível da base de dados na base de dados podem consultar a visualização. A diferença é que o utilizador do controlo de acesso detalhado não precisa de privilégios nos objetos subjacentes.

Limitações das visualizações

As vistas têm limitações em comparação com as tabelas reais que as tornam inadequadas para determinados exemplos de utilização.

  • As vistas são só de leitura. Não podem ser usadas para adicionar, atualizar nem eliminar dados.

    Não pode usar vistas em declarações DML (INSERT, UPDATE, DELETE).

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

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

  • As referências a vistas não podem usar sugestões de tabelas.

    No entanto, a consulta que define uma vista pode incluir sugestões de tabelas nas tabelas a que se refere.

  • As visualizações não são suportadas pela API Read.

  • As vistas de direitos do definidor não são suportadas com o Spanner Data Boost.

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

  • O modo de consulta recomendado para aceder à vista de direitos de um definidor é o modo NORMAL.

    Os utilizadores que não têm acesso aos objetos de esquema subjacentes de uma vista de direitos do definidor recebem um erro quando consultam num modo de consulta diferente do normal.

  • É possível que um utilizador crie uma consulta cuidadosamente elaborada que faça com que o Spanner apresente um erro que mostre ou revele a existência de dados que não estão disponíveis na vista de direitos do definidor.

    Por exemplo, suponha que existe a seguinte vista QualifiedStudentScores que devolve as classificações dos alunos elegíveis para um curso. Os critérios de qualificação baseiam-se no nível e na pontuação do exame do aluno. Se o nível do aluno for igual ou inferior a seis, a pontuação é importante e o aluno tem de obter, pelo menos, 50 pontos no exame para ser elegível. Caso contrário, para níveis iguais ou superiores a seis, o aluno é elegível por predefiniçã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 utilizador pode executar uma consulta sob a forma de SELECT * FROM QualifiedStudentScores s WHERE s.Level = 7 AND 1/(s.Score - 20) = 1;. Esta consulta pode falhar com um erro de divisão por zero se houver um aluno no nível 7 que obteve uma pontuação de 20 pontos, mesmo que a vista limite os dados a 50 pontos e acima para esse nível.

Desempenho das consultas quando usa vistas

Uma consulta que se refere a uma vista tem um desempenho comparável ao da mesma consulta com a respetiva referência de vista substituída pela definição da vista.

Quotas e limites aplicáveis às visualizações

  • A página Quotas e limites apresenta informações de quotas e limites especificamente para as vistas.

  • A utilização de uma vista numa consulta pode afetar a conformidade dessa consulta com os limites de consultas, uma vez que a definição da vista passa a fazer parte da consulta.

Impacto nos custos

A utilização de visualizações tem um impacto muito pequeno no custo de uma instância:

  • A utilização de vistas não tem impacto nas necessidades de capacidade de computação de uma instância, em comparação com a incorporação do respetivo texto de consulta definido em consultas que se referem a elas.

  • A utilização de vistas tem um impacto muito pequeno no armazenamento da base de dados de uma instância, uma vez que a tabela gerada pela execução da definição da consulta de uma vista não é guardada no armazenamento persistente da base de dados.

O que se segue?