Criar e revisar gráficos pelo assistente respeitando as permissões
Leitura de 12 minutos
O assistente de IA e a tela Gráficos seguem as mesmas regras de permissão. Quem não pode editar gráficos não consegue criá-los nem alterá-los pelo chat, e o SQL escrito por usuários que não são master só lê tabelas que o usuário pode consultar, não lê tabelas restritas ao master e não lê campos sensíveis. Este artigo mostra o que muda para quem pede um gráfico ao assistente e para quem escreve SQL próprio.
Antes de começar
Seção intitulada “Antes de começar”Para criar ou ajustar gráficos pelo chat, o perfil do usuário precisa da permissão de editar gráficos, a mesma exigida na tela Gráficos. O usuário master passa.
Criar um gráfico pelo assistente
Seção intitulada “Criar um gráfico pelo assistente”Ao pedir um gráfico no chat, o sistema confere a permissão de editar gráficos antes de qualquer outra coisa: antes de ler a conversa e antes de rodar o SQL. Quem não tem a permissão recebe a recusa (403) com a mensagem:
Usuário sem permissão para editar/criar gráficos.
O gráfico criado pelo assistente é gravado como qualquer outro, pelo mesmo serviço de gravação da tela Gráficos. Por isso a regra é a mesma de quem cria na tela, inclusive a permissão de consulta em cada tabela (veja mais abaixo).
A conversa também precisa ser do próprio usuário. Se ela pertence a outra pessoa ou não existe, o sistema responde 403 ou 404 e não lê nem grava mensagem.
Pedir a revisão de um gráfico no chat
Seção intitulada “Pedir a revisão de um gráfico no chat”Sem a permissão de editar gráficos, pedir a revisão de um gráfico não gera erro. O chat segue como uma conversa normal, e o gráfico não é alterado. Se você esperava ver o gráfico mudar e ele não mudou, confira se o seu perfil pode editar gráficos.
Quando o gráfico é revisado, ele também passa pela regra de tabelas: se o SQL novo cita uma tabela em que você não tem permissão de consulta, a revisão é recusada e o gráfico não é alterado.
O que o SQL de um gráfico pode ler
Seção intitulada “O que o SQL de um gráfico pode ler”O SQL que você escreve em um gráfico, ou que o assistente escreve ou reescreve para ele, passa por uma conferência antes de rodar. Para quem não é master:
Permissão de consulta em cada tabela
Seção intitulada “Permissão de consulta em cada tabela”Quem não é master só consegue usar, no SQL do gráfico, tabelas em que tem permissão
de consulta (registro TBLACS.CONSULTAR, a permissão Consultar das permissões de
acesso). Isso vale em dois momentos.
- Na visualização prévia do gráfico com SQL próprio: se o SQL cita uma tabela sem essa permissão, a resposta é 403 com a mensagem “Sem permissão de consulta em <tabela>.”, e nada é executado no banco.
- Ao gravar (criar ou editar) o gráfico: o autor só grava SQL sobre tabelas que ele
mesmo pode consultar. A conferência cobre todas as formas de SQL do conteúdo: as
fontes de dados, as listas de opções dos parâmetros e o formato antigo (wizard). Se
alguma tabela não passa, a recusa é 403 com o código
GRAFICO_SEM_PERMISSAO_TABELAe nada é gravado.
O usuário master não passa por essa conferência por tabela.
Se a mensagem aparecer, peça a quem administra os acessos a permissão de consulta da tabela citada, ou troque a tabela no SQL.
Tabelas restritas ao master
Seção intitulada “Tabelas restritas ao master”Para quem não é master, as tabelas de administração TBLCAM, TBLTAB, TBLMDL,
TBLUSU e TBLABA são recusadas no SQL do gráfico, na visualização prévia, na criação
e na alteração.
A recusa também acontece ao abrir um gráfico. Se o SQL de um gráfico já gravado lê uma dessas tabelas, quem não é master recebe “Sem permissão de consulta em <tabela>.” (403), tanto nos dados quanto nas opções de parâmetro. Ver campo sensível não substitui ser master. O master continua abrindo o gráfico.
Ao abrir, a regra é diferente para as demais tabelas: uma tabela comum, sem registro
em TBLACS, continua abrindo, porque o acesso ao gráfico vale pela permissão do
próprio gráfico. Quem abre não precisa de permissão em cada tabela lida.
Schema no SQL da visualização prévia
Seção intitulada “Schema no SQL da visualização prévia”Na visualização prévia de quem não é master, SQL que cita schema, por exemplo
outro."TABELA", é recusado (400) com a mensagem:
SQL de painel não pode citar schema; use só o nome da tabela.
É a mesma regra, com o mesmo texto, que já valia ao gravar o gráfico. Use só o nome da tabela.
Campos sensíveis
Seção intitulada “Campos sensíveis”No assistente de gráficos do chat, campo sensível é recusado.
Na tela Gráficos, quem não é master nem tem visconsens não vê campo sensível, e
por isso o SQL é recusado quando:
- cita uma coluna sensível, com a mensagem “Campo sensível não pode ser consultado por SQL: <COLUNA>”;
- compõe a linha inteira, com
to_jsonb,::text,rowou agregação de texto; - referencia a linha inteira de um alias ou de uma tabela.
Se a consulta é recusada por esse motivo, reescreva-a pedindo só as colunas de que o gráfico precisa.
Na visualização prévia, quem não é master também precisa da permissão de editar gráficos.
Senha e anexo não saem por SQL de gráfico
Seção intitulada “Senha e anexo não saem por SQL de gráfico”O hash de senha (SENHA em TBLUSU, TBLPCK e TBLPEX) e o conteúdo de anexo
(ARQUIVO em TBLANX) não têm leitura genérica e não saem por SQL de gráfico, nem
para o master. No teste do produto, um SQL que cita a coluna SENHA foi recusado
(400), e um SELECT * em TBLUSU devolveu as linhas sem a coluna SENHA.
Quais registros o SQL devolve
Seção intitulada “Quais registros o SQL devolve”Além das permissões acima, em módulos com filtro de dono o usuário comum (que não é master nem gerente do módulo) só vê os próprios registros nas tabelas com dono, na prévia do chat, na prévia da tela Gráficos, no painel salvo e nas listas de opções dos parâmetros. O filtro é o de quem abre o gráfico, e não o do autor. Se a prévia não puder ser reescrita com segurança, ela é recusada com “Sem permissão de consulta: SQL sobre tabela com filtro de dono.” Os detalhes estão em quais registros um gráfico mostra a quem o abre.
Quando o sistema não consegue conferir a permissão dos registros
Seção intitulada “Quando o sistema não consegue conferir a permissão dos registros”O filtro de dono nunca é desligado por uma falha passageira. Se o sistema não consegue ler a configuração do módulo para saber se o filtro vale (por exemplo, numa indisponibilidade momentânea do banco), a consulta é recusada em vez de mostrar os registros de todos. Antes dessa correção, a falha fazia a consulta seguir sem o filtro por até 30 segundos.
Nos gráficos, essa falha aparece como a mesma recusa 403 do filtro de dono:
Sem permissão de consulta: SQL sobre tabela com filtro de dono.
Isso vale nos mesmos lugares em que o filtro de dono vale:
- Visualização prévia da tela Gráficos: a recusa aparece na tela com a mensagem acima.
- Assistente de gráfico do chat: a recusa impede criar ou editar o gráfico por esse caminho.
- Abertura de painel salvo: a recusa vale para os dados e para as opções de parâmetro. Nos painéis V2 e V3, ela vale para cada fonte de dados SQL e interrompe a abertura do painel.
A falha não fica guardada. Nada é colocado no cache quando a leitura falha: a consulta seguinte lê a configuração de novo, e o filtro volta a valer assim que o banco responde. Não há nada a configurar: repita a consulta em instantes.
Master e gerente do módulo não são filtrados e seguem como antes. Tabelas fora de módulo com filtro de dono também não são afetadas.
Quando o banco recusa a consulta
Seção intitulada “Quando o banco recusa a consulta”Quando o erro vem do banco de dados, o gráfico mostra uma frase curta e fixa para cada código de erro, sem trecho do SQL nem nome de coluna. Alguns exemplos:
| Frase na tela | Quando aparece |
|---|---|
| “A consulta cita uma tabela que não existe.” | O SQL usa uma tabela que não existe. |
| “A consulta cita uma coluna que não existe.” | O SQL usa uma coluna que não existe. |
| “A consulta tem um erro de sintaxe.” | O SQL está mal escrito. |
| “A consulta usa uma função ou operador que não existe para esses tipos.” | A função ou o operador não serve para os tipos usados. |
| “A consulta mistura coluna agrupada e não agrupada (GROUP BY).” | Há coluna fora do GROUP BY e sem agregação. |
| “A consulta cita uma coluna ambígua; qualifique com o nome ou apelido da tabela.” | A mesma coluna existe em mais de uma tabela da consulta. |
Outros erros de SQL recebem frases mais genéricas:
- “A consulta tem um erro de SQL.”
- “A consulta recebeu um valor inválido (conversão de tipo, divisão por zero ou data fora do intervalo).”
Para um erro que o sistema não sabe classificar, a frase é “Falha ao executar a consulta do painel.”
As mensagens que o próprio produto escreve, como a de permissão, aparecem inteiras, sem troca por frase fixa.
Essas frases valem na visualização prévia, ao abrir os dados do gráfico e ao carregar as opções de parâmetro. Na prévia, o status segue o erro: 403 para permissão e 400 para erro de SQL, com a frase no campo de erro. No assistente de gráficos do chat, os erros de banco também voltam como erro 4xx com o mesmo texto fixo, e as recusas do produto mantêm a mensagem original. Um erro interno vira uma mensagem genérica, como “Falha ao construir gráfico.”
Diante de “cita uma coluna que não existe” ou “erro de sintaxe”, revise o SQL no editor.
SQL colado de outro editor
Seção intitulada “SQL colado de outro editor”Para quem não é master, o SQL com comentário de bloco aninhado ou com caracteres invisíveis (como o U+200B, um espaço de largura zero) é recusado (400) com a mensagem:
SQL recusado: comentário aninhado e caracteres invisíveis não são aceitos. Remova-os e tente de novo.
O sistema não limpa o texto por você: remova o comentário aninhado ou os caracteres invisíveis e tente de novo. Costuma acontecer com SQL copiado de outros editores, chats ou documentos.
O que continua passando:
- um BOM no início do texto colado;
- comentários simples,
--e/* */; --dentro de aspas.
Quem enxerga um gráfico
Seção intitulada “Quem enxerga um gráfico”A leitura de um gráfico (listagem, abrir, dados e busca) por permissão em TBLACS
vale pelo registro mais recente (campo DHALTER) do par gráfico/usuário. Uma
concessão antiga que foi revogada por um registro mais novo deixa de valer. O master
e o dono do gráfico continuam com acesso.
Problemas comuns
Seção intitulada “Problemas comuns”O assistente respondeu “Usuário sem permissão para editar/criar gráficos.” O perfil não tem a permissão de editar gráficos. Peça a quem administra os acessos que a conceda, ou peça o gráfico a quem a tem.
Pedi para ajustar um gráfico no chat e nada mudou. Sem a permissão de editar gráficos, o chat trata o pedido como conversa normal e não altera o gráfico. Se a permissão existe, confira se o SQL novo cita alguma tabela sem permissão de consulta.
Apareceu “Sem permissão de consulta em <tabela>.” ao visualizar ou salvar. Seu perfil não pode consultar a tabela citada. Peça a permissão de Consultar dessa tabela ou troque a tabela no SQL. Nada foi gravado.
Apareceu “Sem permissão de consulta em <tabela>.” ao abrir um gráfico. O SQL
do gráfico lê uma tabela restrita ao master (TBLCAM, TBLTAB, TBLMDL, TBLUSU ou
TBLABA). Quem não é master não consegue abri-lo.
Apareceu “Sem permissão de consulta: SQL sobre tabela com filtro de dono.” e eu já consultava essa tabela antes. Pode ser uma falha passageira na conferência da permissão dos registros: o sistema recusa em vez de mostrar os registros de todos. Repita a consulta em instantes. Se a mensagem continuar, o SQL não pôde ser reescrito com segurança para o filtro de dono; veja quais registros um gráfico mostra a quem o abre.
O painel salvo não abre e a mensagem fala de filtro de dono. Nos painéis V2 e V3, uma recusa do filtro de dono em qualquer fonte de dados SQL interrompe a abertura. Tente abrir de novo em instantes.
O SQL foi recusado por citar schema. Na visualização prévia, use só o nome da
tabela, sem schema..
O SQL foi recusado por “comentário aninhado e caracteres invisíveis”. Remova-os do texto e tente de novo.
Perdi o acesso a um gráfico que era meu por permissão. Se um registro de acesso mais novo revogou a concessão, a antiga deixa de valer. O dono do gráfico e o master não são afetados.