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 tabela virtual executando a consulta definida na visualização, e essa conteúdo da tabela é 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 os direitos do invocador visualização ou a visualização de direitos do definidor. Eles são os dois tipos de modelos de segurança para controlar o acesso dos 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, 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. Usar controle de acesso refinado junto com a visão de direitos do definidor, caso contrário visualização de direitos do definidor não adiciona 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 permissões spanner.database.updateDdl.
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 diversos benefícios além da inclusão das consultas que elas definem no 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 esquemas objetos aos quais a visualização faz referência, crie uma visualização de direitos do definidor. De definição pontos de vista de direitos autorais são mais bem protegidos e têm mais restrições porque de banco de dados pode fornecer a menos usuários 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 instâncias no seu banco de dados. Por exemplo, talvez você queira criar uma visualização de direitos do definidor para o 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 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. 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 no nível do banco de dados. Use controle de acesso refinado junto com a visualização de direitos do definidor. Caso contrário, a visualização de direitos do definidor não adicionará 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 um controle de acesso refinado no banco de dados, usuários de controle de acesso granular com o privilégio SELECT na visualização e Usuários com permissões em nível de banco de dados no banco de dados podem consultar a visualização. O a diferença é que o usuário de 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.

  • 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 a qualificação é baseada no nível e na pontuação 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 igual ou maior que seis, o aluno 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;: 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