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 referente a a visualização é executada, as visualizações às vezes são chamadas de visualizações lógicas ou visualizações 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 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 dos direitos do invocadorVisualizações de direitos do definer
Descrição Se você criar uma visualização com os direitos do invocador, será necessário um papel de banco de dados privilégios na visualização e em todos os objetos de esquema para consultar a visualização. Para mais informações, consulte Visualizações dos direitos do invocador. Se você criar uma visualização com direitos do definidor, um papel de banco de dados precisará sobre a visualização (e somente a visualização) para consultá-la. 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 extra. Para 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 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 visualizar e todos os respectivos para consultar a visualização. Um papel de banco de dados precisa de privilégios para a visualização (e somente 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ísicos O Spanner nã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 na lógica do aplicativo, o Spanner pode e garante que mudanças de esquema nos objetos (tabelas, colunas etc.) aos quais a consulta se refere não invalida a consulta.

Casos de uso comuns

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

Se a visualização não precisar de outras funcionalidades de segurança e todos os invocadores da visualização têm acesso a todos os objetos de esquema aos quais a visualização faz referência, 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 conta pessoal (por exemplo, cliente do aplicativo).
  • Dados específicos da função (por exemplo, pessoal de RH, representante de vendas).
  • Dados específicos de 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 de 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. 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 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 a ela). Portanto, mesmo que o usuário que consulta a visualização não tenha acesso a todas as objetos de esquema, elas podem 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 novos, limitados às linhas definidas na visualização.

As permissões do Identity and Access Management (IAM) do Spanner são concedidas no 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, eles têm permissões de leitura em todos os objetos de esquema na no seu 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 o Ler API.

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

    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.

    Usuários que não têm acesso aos objetos de esquema subjacentes de um objeto direitos de visualização 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 O Spanner gera 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 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 pontuação do exame do estudante. Se o se o nível de um estudante for igual ou menor que seis, a pontuação importa, e ele precisa somar 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;. Esta consulta pode falhar com um erro de divisão por zero se houver um estudante em nível 7 que conseguiu uma pontuação de 20 pontos, embora a visualização limite os dados a 50 pontos ou acima desse 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 de listas de cotas específicas 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