SQLancer模糊测试PostgreSQL
一、概要
SQLancer
SQLancer是一种自动测试数据库管理系统(DBMS)的工具,用于发现其实现中的错误。也就是说,它在DBMS实现的代码中查找错误,而不是在用户编写的查询中查找错误。SQLancer已经在成熟且广为人知的DBMS中发现了数百个bug。
Manuel Rigger
Manuel Rigger 是新加坡国立大学计算机学院计算学部的一位助理教授,领导着 TEST 实验室,该实验室隶属于编程语言与软件工程组。
在具体项目上,他主导开发了 SQLancer 工具,这是一个用于自动测试数据库管理系统的框架。通过该工具,他的团队已发现并报告了数百个关键数据库系统中的独特漏洞,该工具在学术界和工业界均有广泛应用。
Manuel Rigger的主页见参考[2]。
模糊测试相关介绍见参考[4],[5]。
二、环境
- OS:CentOS 7.6
- PostgreSQL版本:v12(v12以上版本支持有缺陷)
- SQLancer版本:v2.0.0
三、编译安装
准备编译环境
要求:
- maven >= 3.2.5
- JDK >= 11
JDK可以直接安装openjdk:
yum install java-11-openjdk
配置PATH:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64/ export PATH=$JAVA_HOME/bin:$PATH
CentOS 7.6默认源安装的maven版本过低,不满足要求,可以从maven官网(见参考[3])下载大于3.2.5版或最新版。
下载后,解压缩,放到可以访问的路径,然后将路径加到PATH中即可,例如:
export PATH=/opt/apache-maven-3.9.12/bin/:$PATH
验证mvn和JDK配置是否正确:
- snippet.bash
$ mvn --version Apache Maven 3.9.12 (848fbb4bf2d427b72bdb2471c22fced7ebd9a7a1) Maven home: /opt/apache-maven-3.9.12 Java version: 11.0.23, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64 Default locale: zh_CN, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
安装PostgreSQL
请自行安装PostgreSQL,过程略。
注意:需要为PostgreSQL创建一个名为“test”的database,否则,后续执行sqlancer时将报以下错误:
SQLancer failed creating a test database, indicating that SQLancer might have failed connecting to the DBMS. In order to change the username, password, host and port, you can use the --username, --password, --host and --port options. org.postgresql.util.PSQLException: FATAL: database "test" does not exist ……
获取SQLancer源码
- snippet.bash
git clone https://github.com/sqlancer/sqlancer cd sqlancer # 使用稳定分支: git checkout v2.0.0
编译
mvn package -DskipTests
四、测试
- snippet.bash
# jar在sqlancer/target目录下 cd target # 直接执行以下命令,将返回命令参数说明: java -jar sqlancer-2.0.0.jar --help
以下是执行PostgreSQL测试示例:
- snippet.bash
java -jar sqlancer-2.0.0.jar --port 7404 --username yz --num-queries 10 postgres [2025/12/24 17:05:44] Executed 0 queries (0 queries/s; 0.00/s dbs, successful statements: 0%). Threads shut down: 0. [2025/12/24 17:05:49] Executed 0 queries (0 queries/s; 0.00/s dbs, successful statements: 71%). Threads shut down: 0. [2025/12/24 17:05:54] Executed 0 queries (0 queries/s; 0.00/s dbs, successful statements: 76%). Threads shut down: 0. [2025/12/24 17:05:59] Executed 0 queries (0 queries/s; 0.00/s dbs, successful statements: 78%). Threads shut down: 0. ……
五、参考
打赏作者以资鼓励:
![]() | ![]() |


