当前位置:网站首页>jdbc ResultSetMetaData获取tableName问题
jdbc ResultSetMetaData获取tableName问题
2022-07-30 07:20:00 【hay_lee】
1.问题
有一个项目客户提出对已上线项目,不改代码的情况下,并且只能提供是jdbc连接与数据库mysql、oracle两种。对客户的需求做了大量的技术调研,mysql jdbc驱动可以使用自定义拦截器实现,但是oracle jdbc驱动没有这个。后来考虑使用java字节码增强形式对jdbc返回结果做拦截脱敏。但是在脱敏的过程当中发现oracle jdbc驱动执行完的sql ResultSet获取ResultSetMetaData中的getTableName方法获取的表名为空。
2.寻找解决方法
因为制定的脱敏规则设置某个表某个字段按照某种规则脱敏。但是现在oracle jdbc驱动无法获取TableName。
经过查oracle官方发现:


可以这么设置(注意:这里只举个例子,其他属性没加)
Properties info = new Properties();
info.setProperty("ResultSetMetaDataOptions","1");
jdbcHandler = JdbcHandler.newJdbcHandler(url, info);但是设置完依然获取不到TableName。
无奈去翻oracle ojdbc源码发现

发现源码未实现。
最后想用实际项目postgres做测试发现增强后查询数据库死循环,翻看源码:


pg查询表名是去再次用sql查询数据库,因为增强的返回结果方法查询表名触发继续去查表名就成了死循环。
最终无奈oracle、postgres只能根据列别名脱敏,无法知道表放弃。mysql可以获取表名、原始表列名、列别名、用户名、数据库名,完全按照这些制定规则脱敏。这篇文章是提醒大家避免入坑,解决方法还在继续探索中。。。
边栏推荐
猜你喜欢
随机推荐
联想笔记本 如何更改Win10系统开机logo图标
Burpsuite几种爆破方式
2022年施工企业数字化转型思考,施工企业数字化转型之路
Mybitatis related configuration files
typescript6-简化运行ts的步骤
阿里云国际版云服务器防火墙设置
ARM体系结构概述
SOFA Weekly|Meetup 广州站、本周 QA、本周 Contributor
Link with Bracket Sequence II(杭电多校赛)
Handler消息机制-Native层
cmd命令
Common configuration
typescript2-typescript为什么给js添加类型支持
sql 引用变量时第一位的0被去除掉如何处理
typescript7-typescript common types
Fix datagrip connection sqlserver error: [08S01] The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption.
LSF提交作业命令--bsub
SQL injection vulnerability (postgresql injection)
出网判断:
你好,我的新名字叫 “铜锁 / Tongsuo”









