Arquitetura

Descreve como funciona o conector com o SQL Server

Esta página é contém alguns detalhes mais técnicos de como a Integração do SQL Server com o Power Omni funciona. Utilize como uma referência para entender todos os aspectos para que você saiba exatamente o que está configurando no seu ambiente.

Basicamente, a integração é um serviço de API que fica entre o Power Omni e a instância SQL Server. Este serviço é responsável por expor as procedures de um banco de dados como API, permitindo que que elas sejam executadas através de chamadas HTTPS POST, passando os parâmetros como um JSON.

O seguinte diagrama mostra o fluxo de dados que ocorre, e por quais componentes passam, quando o Power Omni decide invocar uma procedure de uma instância SQL:

Como o Power Omni acessa as Procedures

O Power Omni não tem acesso direto ao seu banco. Quem conecta no banco, é o serviço de API criado pela Power Tuning, e que você configura na instalação.

Esse serviço conecta na instância (usando as informações da string de conexão), obtém as procedures e gera um schema OpenAPI com base nos metadados e comentários de cada procedure. Esse é o schema que você configura nos conectores do Power Omni.

Esse schema é associado com um conector do tipo OpenAPI, suportado nativamente pelo Power Omni. É aqui que está a mágica que faz o seu Power Omni conhecer suas procedures: Graças ao conector de OpenAPI e ao serviço que traduz as procedures para um schema OpenAPI, nós conseguimos criar uma ponte com o seu banco de dados. E o efeito que temos é esse: Um agente que conhece as suas procedures e parâmetros, que podem ser invocadas via HTTPS.

Drawing

Como a API acessa a Instância SQL

Agora que você entende o papel do serviço de API, é importante conhecer melhor como ela funciona.

Conforme a imagem anterior, a API fica entre o Power Omni e sua instância SQL. É ela quem, de fato, consegue chegar no seu SQL Server. E você faz na configuração, onde coloca a string de conexão com o seu SQL Server.

Ou seja, todas as permissões que ela usa estão sob seu controle e/ou do time que gerencia o banco de dados. O que o serviço o tempo inteiro é:

  • Listar as procedures que ele tem acesso e criar os endpoints

  • Executar as procedures quando o Power Omni pede

Um dos principais pontos que nos guiamos para desenvolver uma solução que usasse apenas procedures, e não código SQL gerado pela IA, é a questão de segurança. Definindo procedures previamente, você tem o total controle sobre que código é executado no seu banco de dados. O Power Omni vai apenas solicitar a invocação de procedures conforme os parâmetros da mesma, e é de sua responsabilidade criar o código da procedure. Isso traz vantagens e desvantangens:

  • Vantagens

    • Não tem o risco da IA executar comandos perigosos ou que podem causar alguma lentidão

    • Reduz a chance de alucinação nas respostas, já que você pode guiar para o correto resultado

    • Você tem total controle sobre quais objetos e comandos T-SQL serão executados

  • Desvantagem

    • A IA não tem liberade para montar e descobrir tabelas dinamicamente

    • Você precisa criar o código e lógica

Segurança da API

Conforme mencionado, a API é uma aplicação web com Node.Js. Nativamente, ela apenas escuta nos endpoints HTTP e faz algumas operações periodicamente. Ela também suporta as definições de API KEYS usando variáveis de ambiente, que podem ser trocadas facilmente.

Porém, você pode adicionar várias camadas de segurança. A mais simples e obrigatória é colocar atrás do protocolo HTTPS, já que o Power Omni não aceita um protocolo diferente no conector de OpenAPI. Os guias de deploy desse artigo sempre te mostram como fazer o deploy usando HTTPS e com API KEYS.

Você pode incrementar a segurança conforme as políticas da sua empresa de várias maneiras:

  • Colocar sob o seu firewall, proxy, etc e limitar o range de IPs

  • Adicionar checks de rate limit ou tentativa de acesso de força bruta

Nosso time também constatemente fará as revisões de segurança, procurando manter o core atualizado, robusto e seguro.

Atualizado