database_scan 是一个 Go 编写的数据库敏感信息检索工具,用于检查开发数据库中是否存在手机号、身份证、地址、账号、密码、邮箱、银行卡、token/secret、云密钥、JWT、Authorization、JDBC 连接串、企微密钥等敏感信息。默认终端表格输出。

field-content:根据表/字段名定位敏感字段,再检索字段内容field-name:只检索敏感表名/字段名content:扫描字段内容all:执行全部模式high:身份证、密码/密钥、银行卡、云密钥、JWT、认证凭据、JDBC 连接串、企微密钥medium:手机号、邮箱low:地址、用户名/账号all:全部级别,默认值go build -o database_scan ./cmd/database_scan
./database_scan --type mysql --host 127.0.0.1 --port 3306 --user root --password pass
也可以把地址和端口写在一起,--host 192.0.2.10:1433 或直接把目标作为位置参数:
./database_scan --type mssql 192.0.2.10:1433 --user sa --password pass
如果不希望数据库密码出现在 shell 历史记录中,可以省略 --password,程序会提示隐藏输入:
./database_scan --type mysql --host 127.0.0.1 --port 3306 --user root
./database_scan --type mssql --host 192.0.2.10 --user sa --password pass --proxy socks5://proxy_user:proxy_pass@127.0.0.1:1080 --mode all
./database_scan --type postgres --host 198.51.100.10 --user dev --password pass --mode content --limit 15
只检索最高敏级别:
./database_scan --type mysql --host 127.0.0.1 --user root --password pass --level high
./database_scan --type oceanbase --host 198.51.100.20 --user dev --password pass --database appdb --output result.xlsx
./database_scan --type opengauss --host 198.51.100.30 --user dev --password pass --database appdb --table public.users
Oracle 的 --database 表示 service name:
./database_scan --type oracle --host 198.51.100.40 --user system --password pass --database ORCL
./database_scan --type mssql --host 192.0.2.10 --user sa --password pass --database appdb
./database_scan --type mssql --host 192.0.2.10 --user sa --password pass --database appdb --table dbo.Users
./database_scan --type mysql --host 127.0.0.1 --user root --password pass --sql "select user, host from mysql.user"
扫描 Redis key/value 中的敏感信息:
./database_scan --type redis --host 127.0.0.1 --port 6379 --password pass --limit 20 --output redis-scan.xlsx
扫描 MongoDB 文档内容,--auth-database 表示 MongoDB authSource:
./database_scan --type mongodb --host 127.0.0.1 --port 27017 --user audit --password pass --database audit_demo --auth-database admin
扫描无认证 Elasticsearch:
./database_scan --type elasticsearch --host 127.0.0.1 --port 9200 --limit 20
扫描 ClickHouse,HTTP 与 Native 协议使用不同类型:
./database_scan --type clickhouse-http --host 127.0.0.1 --port 8123 --user audit --password pass --database audit_demo
./database_scan --type clickhouse-native --host 127.0.0.1 --port 9000 --user audit --password pass --database audit_demo
解析 fscan 扫描结果中的数据库凭据,并对所有命中的数据库一键接入扫描:
./database_scan --fscan fscan-result.txt --workers 4 --limit 5 --output fscan-database-scan.xlsx
同时生成总表和每个数据库凭据的独立表格文件:
./database_scan --fscan fscan-result.txt --workers 4 --limit 5 --output fscan-database-scan.xlsx --split-output
已兼容 fscan v2.1.2 与 1.8.4 的数据库成功行,包括新版保存结果中的 host:port mysql user/pass,以及旧版 "[+] mysql host:port:user pass"。
--type:数据库类型,见下方支持列表--host / --port:目标地址和端口,端口不填时使用默认端口;也支持 --host host:port 或位置参数 host:port--user / --password:账号密码;密码不填时交互输入;Redis 可只传 --password;Elasticsearch 无认证时可留空--database:指定要扫描的单个数据库/索引;Redis 中表示 DB 编号,例如 --database 2--auth-database:MongoDB 认证库,即 authSource;不填时优先使用 --database,再回退 admin--table:只扫描指定数据库中的某一张表,需要同时指定 --database;支持 Users 或 dbo.Users--fscan result.txt:解析 fscan v2.1.2 / 1.8.4 扫描结果中的 MySQL、MariaDB、MSSQL、PostgreSQL、Oracle、Redis、MongoDB、Elasticsearch、ClickHouse 凭据,并逐个接入扫描;同一结果文件可包含多个地址、端口、账号或密码,支持终端输出和保存结果文件--proxy socks5://...|http://...:代理地址--mode field-content|field-name|content|all:检索模式,默认 field-content--level all|high|medium|low:按敏感级别检索,默认 all;high 只检索身份证、密码/密钥、银行卡、云密钥、JWT、认证凭据、JDBC 连接串、企微密钥等最高敏信息--limit:每张命中表最多展示整行样例数量,默认 15--include-system:包含系统库--mask:样例值脱敏显示--no-color:关闭敏感字段和值的颜色标记,适合复制到报告或重定向到文件--no-banner:关闭启动随机颜文字 banner--no-progress:关闭运行状态/扫描进度输出--output result.xlsx:将扫描结果写入 Excel 文件;每个命中表一个 Sheet,上方是敏感字段清单,下方是整行样例数据,敏感字段和值会按风险颜色标记--split-output:配合 --fscan 和 --output 使用,除总表外按每个数据库凭据额外生成独立 Excel 文件--workers:按表并发扫描数量,默认 1,即不启用并发;例如 --workers 4--timeout:单查询超时,默认 15s--sql:执行自定义 SQL;按需求原样执行,不限制为只读mysql、mariadb、mssql、sqlserver、postgres、postgresql、oracle、go-ora、redis、mongodb、elasticsearch、clickhouse-http、clickhouse-nativetidb、oceanbase、oceanbase-mysql、polardb-mysql、doris、starrocks、gbase-mysqlopengauss、gaussdb、kingbase、kingbasees、highgo、polardb-postgres3306,MSSQL 1433,PostgreSQL 协议族 5432,Oracle 1521,Redis 6379,MongoDB 27017,Elasticsearch 9200,ClickHouse HTTP 8123,ClickHouse Native 9000Redis 会按 SCAN 枚举 key,并按类型读取 string、hash、list、set、zset 的样例内容。终端和 Excel 使用 Redis 专用输出结构,列为 Target、DB、Key、Type、TTL、Path/Field、Value、命中类型、敏感级别、判断依据;Excel 会生成 Redis 汇总 和 Redis Keys 两个 Sheet。
MongoDB 与 Elasticsearch 会按文档字段路径展开样例内容,并复用字段名规则与内容正则进行判定。ClickHouse 会通过系统表枚举文本/JSON/枚举/IP/UUID 等可扫描列,并按 HTTP 或 Native 协议执行同一套表扫描逻辑。
协议兼容数据库会复用 MySQL 或 PostgreSQL 的连接协议、代理拨号和元数据扫描方式。达梦 DM、GBase 8s、神通等需要专用驱动、ODBC、CGO 或无法确认代理拨号能力的数据库暂不内置,避免破坏当前多平台发布包。
--password 传入,也可以省略该参数后在提示中隐藏输入。&、?、! 等 shell 特殊字符,建议用单引号包裹,例如 --password 'pa ss!word'。--proxy socks5://user:pass@host:port。--proxy http://user:pass@host:port。@、:、/、?、# 等 URL 特殊字符,需要 URL 编码,例如 @ 写成 %40,: 写成 %3A。--password,改用隐藏交互输入。以下截图中的数据库、表名和敏感样例值均为演示数据,不包含真实生产信息。






0xsdeo:Spade sec默认会完整展示敏感样例值,用于截图证明数据存在;如需降低暴露风险,请加 --mask。
扫描过程中按 Ctrl+C 会停止后续扫描,并尽量输出和写入已经扫描完成的表结果。
GitHub Actions 仅在推送 v* tag 时触发自动测试、构建和 Release;普通 main push 不触发发布流程。
macOS 首次打开下载的 GUI 应用如提示无法打开,可执行:sudo xattr -rd com.apple.quarantine /path/to/database_scan_gui.app
$ claude mcp add database_scan \
-- python -m otcore.mcp_server <graph>