Visão geral das visualizações parametrizadas

No Bigtable, é possível usar visualizações parametrizadas para filtrar dinamicamente intervalos de dados para visualizações lógicas com base no contexto do aplicativo. Essa abordagem protege seus aplicativos contra injeção de SQL e reduz a necessidade de várias visualizações estáticas.

Para processar informações sensíveis, as visualizações parametrizadas do Bigtable usam um contexto isolado separado do texto da consulta SQL. Como o banco de dados vincula esses valores no lado do servidor, os usuários e os agentes de IA não podem manipular os parâmetros de consulta. O banco de dados limita automaticamente o acesso aos dados ao seu contexto específico, independentemente de como você escreve a consulta.

Benefícios das visualizações parametrizadas

As visualizações parametrizadas são adequadas para gerenciar o escopo de dados no nível do banco de dados, principalmente em aplicativos que processam consultas de formato livre traduzidas da linguagem natural. O escopo de dados é o processo de restringir os resultados da consulta a um subconjunto específico de dados. Essas visualizações oferecem uma maneira flexível de implementar o seguinte:

  • Propagação de identidade de nível profundo: aplique permissões de dados refinadas no nível do usuário, o que garante que os usuários só possam acessar o próprio contexto de dados. Por exemplo, um aplicativo pode garantir que os usuários ou locatários recuperem linhas que estejam apenas dentro do limite designado.
  • Gerenciamento de usuários simplificado: use um único papel de banco de dados para todos os usuários do banco de dados em vez de um papel separado para cada usuário.
  • Isolamento de parâmetros: as visualizações parametrizadas atenuam os riscos transmitindo valores como um contexto isolado que permanece fora do controle do LLM ou do usuário final. Como esses valores são mantidos separados do texto da consulta, um usuário ou um agente de IA que gera a consulta não pode manipulá-los.
  • Mitigação de injeção de SQL: ao criar aplicativos, a substituição de parâmetros no lado do cliente no texto da consulta pode levar à manipulação da consulta. As visualizações parametrizadas atenuam esse risco realizando a vinculação de parâmetros no lado do servidor depois que a estrutura da consulta é analisada. Isso evita a injeção de SQL porque os valores controlados pelo invasor não podem mudar a estrutura da consulta.

Por exemplo, considere um aplicativo de monitoramento de saúde que armazena registros médicos de pacientes, incluindo níveis de colesterol. Se os pacientes consultarem os próprios dados, um agente malicioso ou malcomportado poderá gerar ou solicitar uma consulta que tente recuperar os registros de outros pacientes. Usando uma visualização parametrizada, o aplicativo aplica o isolamento do paciente no nível do banco de dados. A visualização é definida com um parâmetro de visualização patient_id:

CREATE VIEW patient_health_pv AS
(SELECT * FROM patient_health_records WHERE patient_id = CAST(VIEW_PARAMETERS('patient_id') AS BYTES))

Quando o cliente quiser consultar a leitura de cholesterol de um paciente:

SELECT readings['value'], readings['date']
FROM patient_health_pv
WHERE readings['test_name'] = 'cholesterol'

Como a visualização é consultada, o Bigtable vincula e aplica automaticamente o valor patient_id do mapa de parâmetros isolado. O LLM ou o usuário final não têm capacidade de alterar ou descartar esse filtro, garantindo um escopo robusto no nível do usuário e eliminando vetores de injeção de SQL.

Como as visualizações parametrizadas funcionam

As visualizações parametrizadas usam um mecanismo chamado parâmetros de visualização para transmitir com segurança o contexto no nível do aplicativo, como um ID de usuário, para o banco de dados. As visualizações parametrizadas fazem isso transmitindo os valores do parâmetro de visualização como um contexto separado e isolado com a solicitação de consulta. O Bigtable pode acessar esse contexto durante a execução da consulta, mas a consulta em si não pode ler ou modificar o contexto.

A função VIEW_PARAMETERS() é a interface SQL para acessar esses parâmetros em uma definição de visualização. Por exemplo, para filtrar dados com base no ID do usuário que faz a consulta, inclua o seguinte na cláusula WHERE da visualização:

CREATE VIEW purchase_history_pv AS
(SELECT * FROM purchases WHERE user_id = CAST(VIEW_PARAMETERS('user_id') AS BYTES))

Também é possível usar VIEW_PARAMETERS() para parametrizar qualificadores de coluna. Isso permite que a visualização retorne campos específicos de forma dinâmica com base no contexto do aplicativo fornecido.

CREATE VIEW specific_test_result_pv AS
SELECT
  tests[VIEW_PARAMETERS('test_name')] AS reading,
  _timestamp AS reading_time
FROM patients

Diferença dos parâmetros de consulta padrão

Os parâmetros de visualização operam de maneira diferente em comparação com os parâmetros de consulta padrão:

  • Sintaxe e contexto: os parâmetros de consulta padrão são definidos usando a @param sintaxe e não podem ser declarados dentro de uma definição de visualização, apenas em uma consulta. Os parâmetros de visualização são acessados usando a função VIEW_PARAMETERS('key'), que pode ser chamada em qualquer contexto de consulta ou visualização.
  • Comportamento de falha fechada: se uma definição de visualização que contém uma referência VIEW_PARAMETERS('key') for consultada, mas o valor correspondente não for fornecido no mapa de parâmetros de visualização da solicitação, a consulta falhará imediatamente com um erro not found / missing parameter. Isso evita a exposição acidental de dados se a configuração for aplicada incorretamente.

Limitações

As seguintes limitações se aplicam a visualizações parametrizadas:

  • Só é possível criar visualizações parametrizadas de visualizações lógicas. Crie uma nova visualização lógica parametrizada usando a Google Cloud CLI. Não modifique uma visualização lógica existente.
  • Os parâmetros de visualização só aceitam valores do tipo string. Se um parâmetro representar um tipo de dados diferente na definição SQL da visualização, transmita o valor de parâmetro como uma string e transmita-o dentro da definição da visualização. Por exemplo, CAST(VIEW_PARAMETERS('parameter_name') AS INT64).

A seguir