Tout le monde fait la même erreur. Vous branchez un agent IA sur votre base Postgres, vous lui donnez un accès en "lecture seule" pour éviter qu'il ne détruise la production, et vous dormez sur vos deux oreilles. Réveillez-vous. Le "Read-Only" est une passoire, et DeepSQL vient enfin d'inventer le bouchon.
L'industrie de la tech a un talent fou pour se rassurer avec des concepts périmés. Depuis l'explosion des outils Text-to-SQL comme LangChain SQLDatabaseChain, Vanna AI ou DB-GPT, le manuel du parfait petit architecte IA se résume à une ligne de commande que tout le monde copie-colle sur Stack Overflow : GRANT SELECT ON ALL TABLES IN SCHEMA public TO agent_ia;.
L'idée est simple. Si l'agent ne peut pas faire de UPDATE, de DELETE ou de DROP, la base est en sécurité. Aucun risque qu'un modèle halluciné n'efface la table des commandes ou ne remplace tous les prix par des zéros. C'est vrai. C'est factuel. C'est aussi d'une stupidité abyssale.
Bloquer les écritures empêche le vandalisme. Cela n'empêche absolument pas l'exfiltration. Le verbe le plus dangereux dans une base de données n'est pas DROP. C'est SELECT. Et en donnant un accès global en lecture à un agent conversationnel, vous venez de créer la plus belle fuite de données de l'histoire de votre entreprise.
L'angle mort du compte de service unique
Imaginez votre entreprise. Vous avez des commerciaux, des ingénieurs support, des responsables RH, des comptables. Chacun a des droits d'accès limités à ses propres outils. Le commercial ne voit pas les salaires. Le support ne voit pas les marges fournisseurs. C'est la base absolue de la compartimentation.
Et puis, le directeur technique décide de déployer un agent IA interne pour "démocratiser l'accès aux données". Cet agent utilise un compte de service unique pour se connecter à la base Postgres ou MySQL. Ce compte technique possède les droits de lecture sur l'intégralité des schémas. Il représente l'autorité suprême. Un super-ensemble des droits de tous les employés réunis.
Que se passe-t-il le jour où un stagiaire demande innocemment à l'agent : "Quel est le salaire médian de l'équipe marketing et la liste des primes versées cette année ?"
L'agent obéit. Il est programmé pour plaire. Il génère une requête SELECT parfaitement bien formatée, l'exécute avec son super-compte, et affiche le contenu de la table hr.compensation sur l'écran du stagiaire. Félicitations. Vous venez de violer le secret des affaires, le RGPD et le bon sens en une seule transaction.
La blague continue si le responsable de la sécurité des systèmes d'information (RSSI) décide d'enquêter. Il ouvre les journaux d'audit de PostgreSQL. Que voit-il ? Les logs n'enregistrent que le compte technique deepsql_agent ou langchain_service. Strictement impossible de prouver quel humain a posé la question. L'anonymat est parfait pour le pillage interne.
Autopsie d'un braquage par CTE
Face à ce désastre annoncé, les développeurs de frameworks IA ont paniqué. Ils ont rajouté des filtres naifs. Des garde-fous basés sur des listes de mots interdits ou des expressions régulières grossières. L'approche classique consiste à analyser la clause FROM de la requête générée par le LLM. Si la table s'appelle hr.compensation, la requête bloque.
C'est ignorer la richesse syntaxique du langage SQL. Et c'est là que les ingénieurs de DeepSQL, fondé par Venkat Sakamuri, un ancien de l'équipe moteur de requêtes d'Oracle, viennent siffler la fin de la récréation.
Dans leurs notes de versions d'août 2026, ils documentent les méthodes de contournement réelles observées sur les architectures d'agents en production. La plus belle est sans doute la fuite par Common Table Expression (CTE).
Regardez cette merveille de vice :
WITH leak AS (
SELECT employee_id, base_salary, bonus
FROM hr.compensation
)
SELECT c.name, l.base_salary, l.bonus
FROM crm.customers c
JOIN leak l ON l.employee_id = c.owner_id;Le filtre naif regarde la requête principale. Il voit FROM crm.customers. La table des clients est autorisée pour le support. Le filtre valide la requête. Sauf que la charge utile sort par la CTE cachée juste au-dessus. La barrière est contournée avec la facilité d'un enjambement de tourniquet de métro.
Même punition avec les jointures latérales (LATERAL JOIN), les sous-requêtes scalaires ou les branches UNION ALL. Le SQL est un langage Turing-complet. Tenter de le sécuriser avec des expressions régulières relève de la psychiatrie. Les attaquants ou même les utilisateurs maladroits trouveront toujours un chemin syntaxique pour aller chercher la donnée.
L'empoisonnement par le contexte de schéma
L'autre pratique suicidaire consiste à injecter la structure complète de la base de données dans le prompt système du LLM. On prend les métadonnées de 500 tables, on les balance au modèle au démarrage de la conversation, et on lui demande de se débrouiller avec ça.
Le problème est double. D'abord, le modèle prend connaissance de l'architecture intime de l'entreprise. Il voit les tables nommées projet_fusion_acquisition_2027 ou audit_fraude_fiscale_interne. Même si un outil externe parvient à bloquer l'exécution finale de la requête SQL, le mal est fait. Le LLM a l'information dans son contexte. Il va la recracher dans une banale conversation textuelle, sans jamais générer une seule ligne de code SQL. Le secret est éventé avant même d'avoir touché la base.
Ensuite, le modèle, statistiquement curieux de nature, tente souvent de faire des jointures vers ces tables interdites pour enrichir ses réponses. Cela génère des erreurs d'exécution en cascade côté base de données, gaspille des jetons API pour rien, et finit par frustrer l'utilisateur qui ne comprend pas pourquoi sa requête plante.
DeepSQL : le planificateur AST prend les commandes
C'est ici qu'intervient DeepSQL. La startup californienne, passée par Y Combinator, a compris l'évidence. On ne fait pas confiance au modèle. Jamais. Le prompt engineering pour la sécurité est une vaste blague. Demander poliment à Claude ou GPT-4o de ne pas regarder les tables RH fonctionne exactement jusqu'à ce qu'un utilisateur le pousse à le faire.
DeepSQL v1.2.0, publié mi-août 2026, règle le problème à la racine. Ils ont construit une architecture en trois couches, développée en Java Spring Boot, qui intercepte les opérations au niveau du planificateur de requêtes (AST Query Planner).
La méthode est clinique.
Phase 1 : L'introspection conditionnelle. Avant même que le LLM ne soit appelé, DeepSQL regarde qui est l'utilisateur connecté. Le moteur ne charge dans la fenêtre de contexte de l'IA QUE les schémas et tables explicitement autorisés pour ce profil. L'agent ignore littéralement l'existence des données financières. On ne peut pas fuiter ce qu'on ne connaît pas. Le vecteur d'empoisonnement par le contexte est éliminé.
Phase 2 : Le garde-fou syntaxique (Query Statement Guard). Quand le LLM pond enfin sa requête SQL, DeepSQL ne fait pas un pauvre grep sur le texte. Le moteur parse intégralement la requête pour construire un arbre syntaxique abstrait (AST). Il résout récursivement tous les nœuds FROM, toutes les CTE, toutes les sous-requêtes et toutes les branches UNION. Aucune table cachée ne survit à cette radiographie. Si une table non autorisée est touchée dans un recoin sombre de la requête, l'exécution saute. Point final.
Phase 3 : L'impersonation. Les fondateurs de DeepSQL ont ajouté une fonction baptisée "View as". En un clic via une simple commande d'interface, l'administrateur prend l'identité d'un analyste junior. Il constate, en temps réel, que les tables RH ont disparu des suggestions. Trente secondes pour auditer un profil, contre des heures de tests manuels et de reconnexions par le passé.
Le RGPD et la crise de nerfs des DPO
Le déploiement sauvage d'agents SQL a un coût légal que la plupart des startups ignorent royalement. En Europe, la CNIL et le CIANum ont publié en juillet 2026 une doctrine claire sur l'IA agentique. La conclusion ne laisse aucune place à l'interprétation : utiliser un compte de service générique pour accéder à des données personnelles détruit le principe de minimisation de l'Article 5 du RGPD.
Les données doivent être limitées à ce qui est strictement nécessaire pour la tâche de la personne qui les consulte. Un agent qui a un accès total pour répondre à une question sur les stocks viole la loi dès la seconde où il s'allume. De plus, la perte de la piste d'audit dont nous parlions plus haut détruit la conformité à l'Article 32 sur la sécurité des traitements.
DeepSQL réconcilie les directeurs des systèmes d'information (DSI) avec leurs délégués à la protection des données (DPO). En restituant le contrôle d'accès au niveau de l'utilisateur humain pour chaque transaction, l'outil permet d'auditer proprement chaque requête. La base de données sait que l'ingénieur Martin a demandé telle information à 14h32. Le fait que la question ait transité par un LLM devient un détail technique, pas un trou noir juridique.
Le prix de la paranoïa (les limites techniques)
L'outil frappe fort. Il est 100% open-source sous licence Apache 2.0. Mais il porte le poids de ses ambitions. L'architecture Java requiert au minimum 4 Go de mémoire vive. Ce n'est pas un petit script Python que l'on lance sur un Raspberry Pi. Pour les petites équipes habituées à des binaires Go légers, cette charge d'infrastructure fait transpirer les serveurs.
Le support des moteurs de bases de données se limite pour l'instant à PostgreSQL (versions 12 à 17) et MySQL (8.0+). Si vous êtes coincé chez Oracle ou Microsoft SQL Server, ou si vous avez tout misé sur un data warehouse cloud comme Snowflake ou BigQuery, vous resterez à la porte pour le moment.
Enfin, la configuration initiale demande de la rigueur. Le moteur de DeepSQL permet d'écrire des règles d'accès en langage naturel ("Aucune donnée financière pour l'équipe support"). Le système compile ensuite cette règle en listes d'inclusion et d'exclusion. Mais la machine n'est pas devin. Si vos tables ont des noms absurdes et ne respectent aucune convention de nommage métier (genre t_x99_rev), l'IA de DeepSQL pourrait rater une table sensible lors de la traduction de la règle. Une vérification manuelle approfondie via la fonction "View as" reste indispensable avant tout déploiement en production.
Verdict
L'ère de l'ingénierie des prompts décorative est morte. C'était amusant de demander poliment à des modèles de ne pas être méchants en 2023. Aujourd'hui, connecter une IA générative à une base de données de production avec des instructions vagues est une faute grave.
DeepSQL démontre que la véritable sécurité ne se négocie pas avec un modèle linguistique. Elle s'impose au niveau de l'infrastructure, dans la dureté du marbre de l'analyse syntaxique AST. Le "Read-Only" n'a jamais été une armure. C'était juste une étiquette "Ne pas déranger" accrochée sur la porte d'un coffre-fort grand ouvert. Il était temps que quelqu'un tourne la clé.
Sources
- Site officiel de DeepSQL
- Analyse détaillée des vulnérabilités de requêtes et du mythe de la connexion Read-Only (Article de recherche)
- Dépôt GitHub DeepSQL (Code source, version 1.2.0)
- Changelog et correctifs de sécurité des versions 1.0.0 à 1.2.0
- Débat de la communauté Hacker News sur le déploiement en production
- Vulnérabilités d'injection Prompt-to-SQL (Synthèse académique)
- Guide d'architecture Zero-Trust pour bases de données
- Note de la CNIL et du CIANum sur l'IA agentique (Juillet 2026)
✦ Idée d'illustration : Un coffre-fort géant en acier massif dont la porte est grande ouverte. À l'intérieur, un petit robot innocent lit un livre de comptes pendant que des dossiers s'envolent discrètement par la fenêtre derrière lui. Style néobrutaliste, palette de couleurs froides (bleu industriel, gris acier) avec des accents rouge vif.







