发布于 

用LLM生成SQL的注意事项

原文:Generating SQL with LLMs for fun and profit

SQL语言模型存在潜在的安全风险

SQL(结构化查询语言)是一种编程语言,一些实现甚至是图灵完备的。连接语言模型和SQL数据库的教程已经出现,但这样的模型可能生成不安全的SQL语句。恶意用户可以利用这一点进行数据库攻击,如删除或更改表,甚至可能导致CPU的无限循环。

1. 教程中的SQL模型存在潜在安全风险

一些教程允许语言模型生成任意的SQL以“查询”数据库,但很容易产生恶意的SQL语句。实际测试表明,用户可以请求执行危险操作,如删除或更改表,而模型将会执行。

2. 使用SQLite进行CPU消耗攻击

使用SQLite数据库,用户甚至可以运行无限循环的SQL查询,导致CPU被占用。这种操作可能会对系统产生拒绝服务攻击。

3. 模型无法有效防止SQL注入

即使将危险查询示例展示给模型,它仍可能无法准确标记其他潜在的危险查询。模型在接受新的提示时仍可能执行危险操作。

4. 建议防止安全风险

如果数据库仅用于查询,可以将其设置为只读。同时,应创建一个权限极其有限的角色供语言模型使用,以最大程度地减少对数据的篡改。但这仍无法完全防止拒绝服务攻击和数据泄露。

5. 结论:慎重使用语言模型执行SQL语句

在使用语言模型执行SQL语句之前,必须仔细考虑可能带来的安全风险。尽管它们可以帮助设计查询语句,但目前还不适合在生产系统中让它们将自然语言转换为可执行代码。这样的模型可能适用于教程和实验,但不适合于可信的生产环境。