Natural-Language SQL en Atlassian Forge: Un patrón seguro con Rovo LLM + Forge SQL TiDB
Introducción
Al desarrollar una app en Forge que almacena metadatos estructurados en Forge SQL exploré cómo Rovo puede servir no solo para documentación y explicaciones, sino también para analítica en lenguaje natural. El reto clave es ejecutar SQL generado por un LLM de forma segura y predecible. Aquí describo un patrón reproducible que combina una capa Guide en el prompt y una capa Guard en el backend para garantizar validación estricta de consultas, alcance de tabla único, seguridad a nivel de fila, comprobaciones de metadatos y detección de joins mediante EXPLAIN.
Resumen del problema
Permitir que un modelo genere SQL introduce riesgos importantes: la consulta debe ser estrictamente SELECT, debe apuntar solo a la tabla prevista, no puede ocultar joins ni subconsultas, debe evitar suplantación de columnas, hay que aplicar seguridad a nivel de fila y prevenir la manipulación de variables de contexto. Rovo nunca debe ser la única autoridad para imponer restricciones. Todas las protecciones deben implementarse en el ejecutor del backend.
Patrón Guide + Guard
La solución propone dos capas independientes: Guide que limita y guía la generación de SQL en manifest.yml, y Guard que valida y reescribe la consulta en RovoService.ts. Guide mejora la precisión del LLM. Guard garantiza la seguridad.
Guide en manifest.yml
El prompt rovo agent define límites estrictos y una regla central: una acción Rovo debe operar sobre una sola tabla, sin joins y con una única sentencia SELECT. Reglas no negociables: usar solo SELECT de lectura, consultar únicamente la tabla security_notes, no generar joins ni referencias a otras tablas en FROM JOIN subqueries o CTEs, no producir DML ni DDL. Toda ejecución pasa por la acción backend y la política de permisos y filtrado por fila se aplica server side.
Columnas de seguridad obligatorias
Cada consulta debe incluir exactamente como campos crudos de la tabla las columnas created_by y target_user_id. El agente tiene prohibido renombrarlas, aliasarlas, envolverlas en expresiones, o generarlas desde tablas derivadas. El backend valida su origen usando orgTable proporcionado por Forge SQL.
Variables de contexto y mapeos naturales
El agente puede insertar marcadores que el backend sustituirá por valores autenticados como :currentUserId :currentIssueKey :currentProjectKey. También se definen mapeos en lenguaje natural para condiciones frecuentes por ejemplo my notes mapea a created_by = :currentUserId OR target_user_id = :currentUserId o this issue a issue_key = :currentIssueKey. Esto ofrece semántica determinista y controlada para el agente.
Herramientas y acciones
Al final de cada interacción Rovo debe construir una consulta SELECT válida que siga las reglas y ejecutar la acción con la sintaxis esperada por el backend por ejemplo accion con sql La respuesta del backend se resume y se presentan conteos o una pequeña tabla de resultados para el usuario.
Guard en RovoService.ts
El ejecutor backend normaliza y valida toda consulta generada por Rovo antes de ejecutar nada. Pasos clave:
Normalización SQL eliminar saltos de línea colapsar espacios y quitar punto y coma final y prefijos de usuario para evitar evasiones basadas en formato.
Enforce SELECT only validación de que la consulta comienza con SELECT en mayúsculas para impedir cualquier DML o DDL.
Alcance de tabla y detección de joins mediante EXPLAIN se aplican en dos niveles: comprobación textual de que la consulta referencia únicamente FROM security_notes y ejecución de EXPLAIN para analizar el plan de consulta. Si EXPLAIN contiene operadores de join como HASH JOIN NESTED LOOP CARTESIAN se rechaza la consulta. Esto evita joins ocultos o reescritos por el optimizador.
Sustitución de variables de contexto los placeholders se reemplazan por valores autenticados del entorno Forge para impedir que el modelo inyecte identidades o manipule el contexto.
Seguridad a nivel de fila wrapping para usuarios no administradores: la consulta validada se envuelve garantizando WHERE t.created_by = currentUserId OR t.target_user_id = currentUserId de forma server side. Con esto el usuario solo ve notas que creó o que le fueron compartidas aunque el LLM haya producido un WHERE incorrecto.
Validación post ejecución de metadatos Forge SQL expone orgTable por columna. El ejecutor verifica que created_by.orgTable y target_user_id.orgTable sean security_notes. Si cualquier columna proviene de constantes expresiones subconsultas u otras tablas la consulta se rechaza. Esto evita spoofing de columnas y asegura la corrección del RLS.
Garantías de plataforma que refuerzan el patrón
Además de la validación a nivel de app Forge SQL ofrece propiedades que fortalecen el modelo: ejecución de una sola sentencia por llamada lo que elimina multi statements clásicos y reduce la superficie de inyección y aislamiento de tenant que evita accesos a esquemas de otros tenants.
Arquitectura recomendada: una tabla por acción Rovo
Las garantías de seguridad dependen de que cada acción Rovo opere sobre una sola tabla. Esto mantiene la ejecución predecible facilita la detección de joins mediante EXPLAIN hace fiable la validación orgTable y permite aplicar RLS. Si la analítica necesita múltiples conjuntos de datos hay alternativas compatibles con la restricción una tabla por acción como consolidar datos en una tabla de analítica mediante procesos de sincronización o agregación nocturna o exponer una acción Rovo por cada tabla relevante con su propia lógica de validación.
Resultado
Con un Guide estructurado en manifest.yml y un Guard estricto en el ejecutor es posible ofrecer analítica en lenguaje natural con LLMs sin sacrificar seguridad. Todas las consultas generadas quedan en un sandbox validado se aplica RLS siempre se bloquean joins y accesos cruzados y se previene la inyección por diseño. Los usuarios obtienen una interfaz potente para analítica natural sin comprometer datos confidenciales.
Aplicación práctica y servicios Q2BSTUDIO
En Q2BSTUDIO desarrollamos soluciones a medida que integran inteligencia artificial y seguridad operativa. Si necesitas una aplicación empresarial que combine capacidades de IA con garantías de ciberseguridad y cumplimiento podemos ayudarte a diseñar la arquitectura segura basada en Forge y Rovo o implementar pipelines analíticos en TiDB y Forge SQL. Contamos con experiencia en desarrollo de aplicaciones a medida y software a medida y ofrecemos servicios completos de inteligencia artificial para empresas incluyendo agentes IA y Power BI para visualización.
Si buscas modernizar tu plataforma con soluciones cloud también desplegamos e integramos servicios cloud en AWS y Azure y ofrecemos automatización de procesos y proyectos de inteligencia de negocio. Conoce nuestros servicios de desarrollo en la página de aplicaciones a medida visitando desarrollo de aplicaciones y software multicanal y descubre nuestras capacidades de IA para empresas en servicios de inteligencia artificial. Para temas de ciberseguridad y pentesting ofrecemos auditorías y hardening que complementan estas arquitecturas.
Conclusión
El patrón Guide más Guard proporciona un sobre seguro para ejecutar SQL generado por modelos dentro de Forge garantizando predictibilidad y control. Adoptar la regla una tabla por acción junto con comprobaciones EXPLAIN y validación orgTable permite aprovechar la potencia de los LLM para analítica en lenguaje natural sin sacrificar la seguridad ni la separación multitenant. Si necesitas ayuda para diseñar o implementar este enfoque Q2BSTUDIO puede acompañarte desde el prototipo hasta la puesta en producción integrando software a medida inteligencia artificial ciberseguridad y servicios cloud.





