数据库查询智能体的“只读”不能只写在提示词里。示例由程序限制允许操作,再尝试DELETE并查询剩余数据,确认模型建议无法绕过写入边界。
开发只读数据库查询智能体的读者。本文使用 Python 3.11 或以上版本的标准库,先验证一组人工构造的小样本。AI 负责提出实现或解释差异,结果由本地检查决定;这里没有把模型回答当成真实运行结果。

验证查询工具不能写数据前,先定规则
演示仅允许SELECT与对notes表的READ。它不是通用SQL网关,函数、PRAGMA、其它表都没有开放。
授权回调收到操作码,程序返回SQLITE_DENY即拒绝。不要只用sql.lower().startswith(select),注释、多语句和特殊语法会使字符串筛选不可靠。
生产使用数据库只读账号或只读连接作为独立限制,工具还须按真实用户过滤可读记录。
给 AI 的输入要包含什么
把下面这份输入说明和你的实际样本一起交给可用的 AI 编程助手。示例只含虚构数据;对真实材料先去除账号凭据和个人信息。
配置SQLite授权回调,仅允许SELECT与读取notes表。正常select id能执行,delete from notes被拒绝且行仍存在。工具结果失败必须保留,不能包装为空列表。
要求模型保留检查条件,并把它认为缺少的业务定义列出来。若回答改变了输入字段、忽略异常分支或直接删除原材料,先要求修正,再运行。提示词的作用是缩小任务范围,验收仍以代码和数据为准。
保存并运行最小验证程序
下方程序把关键规则和验证用例放在同一个可复跑示例中,便于先理解输入如何变成输出,再用它检查 AI 给出的实现。
新建一个空目录,把下面代码保存为 check.py,在该目录打开终端,运行 python -X utf8 check.py。代码自带示例输入,不需要安装第三方库。
import sqlite3
db=sqlite3.connect(':memory:')
db.execute('create table notes(id integer)');db.execute('insert into notes values(1)');db.commit()
def authorize(action,arg1,arg2,database,trigger):
if action==sqlite3.SQLITE_SELECT: return sqlite3.SQLITE_OK
if action==sqlite3.SQLITE_READ and arg1=='notes': return sqlite3.SQLITE_OK
return sqlite3.SQLITE_DENY
db.set_authorizer(authorize)
assert db.execute('select id from notes').fetchall()==[(1,)]
try: db.execute('delete from notes')
except sqlite3.DatabaseError as e: print('write_blocked',type(e).__name__)
else: raise AssertionError('写入必须拒绝')
assert db.execute('select id from notes').fetchall()==[(1,)]
print('readback',[(1,)])
怎样判断结果符合要求
正常查询返回1,DELETE产生DatabaseError,回读仍是1。授权拒绝是真实执行失败,工具应明确报告被拒绝。
下方是这份最小示例在本地执行得到的输出。它验证示例程序与断言的关系,不代表任何 AI 模型一次就能生成同样代码,也不构成性能或生产可靠性结论。
write_blocked DatabaseError
readback [(1,)]
允许READ某张表仍会读取其所有行,本例不实现租户隔离。
授权回调与数据库账号共同形成限制,不能用其中一个代替完整资源权限。
哪些失败必须停下来处理
SELECT可能产生巨大计算或泄露敏感字段,还需限制列、行数、运行时间与函数。
授权回调规则取决于实际操作码,不复制未知常量或放行所有FUNCTION。
接入自己的任务前再核对一次
真实系统用固定查询工具与参数化输入优先,只有确有需要才开放受控SQL。
增加跨用户拒绝与查询预算测试,返回截断状态时不要声称结果完整。
资料与适用范围
Connection.set_authorizer回调可允许或拒绝SQLite访问操作,回调拒绝时执行失败。以下链接核对于 2026-10-03;运行环境及额外依赖按本文前述说明。
相关基础可阅读 AI 生成 SQL 怎么用?从表结构写出查询,再在 SQLite 中验证。本文的重点是验证查询工具不能写数据,可以把两项检查作为不同步骤保留。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/33427.html