Pular para o conteúdo

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.

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.

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.

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 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:

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_TABELA e 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.

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.

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.

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, row ou 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.

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.

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 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.

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.

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.

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.