hanchuanchuan / goInception

一个集审核、执行、备份及生成回滚语句于一身的MySQL运维工具
https://hanchuanchuan.github.io/goInception/
GNU General Public License v3.0
1.6k stars 545 forks source link

masking 获取查询SQL字段信息时出现字段不存在错误 #595

Open xylanh opened 12 months ago

xylanh commented 12 months ago

描述 利用 --masking=1 参数获取查询语句中的字段信息,若查询语句中包含有子查询时, 会出现某些字段不存在的错误

重现

CREATE TABLE B ( id int(11) NOT NULL AUTO_INCREMENT, named varchar(35) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

- 需获取字段信息的查询SQL

select B.id, tab.named from ( select A.lid, B.named from A left join B on A.zid=B.id ) AS tab left join B on B.id=tab.lid

上述查询 SQL 在获取查询字段信息时会 出现 "Column 'tab.named' not existed" 错误 .
1. 假如把  tab.named 改成 named (即去掉 tab. 前缀)则能正确获取到对应的字段信息
2. 假如 A 表中也存在 named 字段,则上述SQL中  tab.named 字段获取的字段的信息是 A 表中对应的字段信息. (正确的应该是B表对应的字段信息)

**环境**
 - 数据库: mysql
 - 数据库版本: 5.6.40
 - goInception版本: v1.3.0-72, v1.3.0-76

**参数**
请求参数如下

/--user={};--password={};--host={};--port={};--db={};--ignore_warnings=1;--masking=1;/