Consultar o QueryMesh em nome de quem entrou
Com a capacidade QueryMesh ligada, a aplicação consulta o QueryMesh da organização em nome da pessoa que entrou. A credencial é dessa pessoa, e as políticas de dados da organização — acessos, máscaras e filtros definidos pela governança — decidem o que ela vê. Duas pessoas, a mesma consulta, resultados diferentes:
const r = await nn.querymesh.query(req, 'SELECT name, regionkey FROM tpch.tiny.nation')
// r.columns, r.rows — só o que as políticas DESTA pessoa deixam ver
A aplicação não informa o endereço do QueryMesh, não recebe token do IAM e não filtra linha nenhuma.
Antes de começar
- O login da organização ligado e publicado no serviço.
- O QueryMesh da organização configurado no Zero — o administrador da organização faz isso uma vez.
- Você pode alterar o serviço no projeto.
- O console ainda não tem a tela: use a CLI (ou a API).
Passo a passo
-
O administrador da organização configura o QueryMesh dela, uma vez:
zero orgs integrations set querymesh --url https://querymesh.suaempresa.com.brSó HTTPS.
--audiencediz o que o QueryMesh exige no token (padrãotrino-oidc). -
Ligue a capacidade no serviço:
zero services enable querymesh webNão é preciso publicar de novo: a capacidade fica Pronta quando o IAM da organização liberar o QueryMesh para a aplicação.
-
Confira de ponta a ponta:
zero services doctor querymesh webCada verificação diz quem resolve o que falta: a aplicação, o administrador da organização ou a plataforma.
-
No código, consulte com
nn.querymesh.query(req, sql).
No código
import { NNumbers, QueryMeshAccessDeniedError, UnauthenticatedError } from '@nnumbers/zero/app'
const nn = NNumbers.init()
app.get('/api/paises', async (req, res) => {
try {
const r = await nn.querymesh.query(req, 'SELECT name, regionkey FROM tpch.tiny.nation ORDER BY name')
res.json({ columns: r.columns, rows: r.rows })
} catch (e) {
if (e instanceof UnauthenticatedError) return res.redirect(e.loginPath)
if (e instanceof QueryMeshAccessDeniedError) return res.status(403).json({ code: e.code })
throw e
}
})
query(req, sql, { maxRows, signal }) devolve { columns, rows }, com o nome e o tipo de cada coluna. Use nomes completos (catálogo.esquema.tabela). maxRows (padrão 100.000) é o teto de linhas trazidas para a memória: acima dele, a consulta é cancelada no QueryMesh. signal também cancela lá, e não só a espera.
| Erro | Código | Quando |
|---|---|---|
UnauthenticatedError | USER_SESSION_REQUIRED | ninguém entrou, ou a sessão terminou — mande ao loginPath |
ResourceCredentialError | RESOURCE_CREDENTIAL_DENIED | a capacidade ou o QueryMesh da organização desligado, ou o IAM ainda não liberou o QueryMesh — zero services doctor querymesh <serviço> diz qual |
QueryMeshIdentityRejectedError | QUERYMESH_IDENTITY_REJECTED | o QueryMesh não aceitou a identidade da pessoa — confira a audiência configurada |
QueryMeshAccessDeniedError | QUERYMESH_ACCESS_DENIED | as políticas de dados negaram a consulta a esta pessoa |
QueryMeshError | QUERYMESH_QUERY_FAILED | sintaxe, tabela inexistente, maxRows excedido; retryable quando repetir pode dar certo |
Em outra linguagem
A aplicação pede a credencial da pessoa ao endereço em NNUMBERS_BROKER_URL, com a identidade que recebeu na requisição:
POST {NNUMBERS_BROKER_URL}/v1/credentials
X-NNumbers-Identity: <a identidade da requisição>
Content-Type: application/json
{"resource": "querymesh"}
A resposta traz token, token_type (Bearer), expires_in (segundos) e resource.endpoint, o endereço do QueryMesh. Consulte esse endereço com o protocolo do QueryMesh e Authorization: Bearer <token>, e nunca mande o token a outro endereço. Confira a identidade antes, como em Quem entrou, no código: sem pessoa, não peça.
Os estados
| Estado | O que significa | O que fazer |
|---|---|---|
| Desligada | a capacidade não está ligada | — |
| Falta configurar na organização | a organização não tem o QueryMesh configurado, ou ele está desligado | o administrador da organização: zero orgs integrations set querymesh --url https://… |
| Aguardando o login da organização | o login da organização ainda não está pronto para a aplicação | ligue e publique o login da organização |
| Liberando o QueryMesh no IAM | a plataforma está liberando o QueryMesh para a aplicação | aguarde |
| O IAM não liberou o QueryMesh | o IAM da organização ainda não aceita o QueryMesh para as aplicações — uma vez por organização | peça ao administrador da plataforma; segue sozinho depois |
| Pronta | a credencial sai em nome de quem entrou | — |
O que a plataforma garante
- A consulta é da pessoa. A credencial leva a identidade de quem entrou, emitida pelo IAM da organização para esta aplicação, e vale minutos. Sem pessoa não há consulta: não existe credencial "da aplicação" para cair nela.
- O endereço não é da aplicação. Vem da configuração da organização, e a credencial só vai a ele. Se o QueryMesh mandar continuar em outro endereço, a consulta falha e a credencial não segue.
- Desligar corta na hora. Desligar a capacidade ou o QueryMesh da organização faz a plataforma parar de emitir a credencial — antes mesmo de o IAM terminar de retirar a liberação.
- Cada um no seu lugar. Outra aplicação, outra organização, sessão encerrada: nenhuma credencial.
Limites
- O
nn.querymeshé do SDK de TypeScript; em outra linguagem, use a chamada acima. - Uma integração por organização: o QueryMesh.
- O console ainda não tem a tela: use a CLI ou a API.
Próximos passos
Esta página ajudou?
Reportar um problema nesta páginaNão envie senhas, chaves, tokens ou dados de clientes.