当前位置:网站首页>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可以获取表名、原始表列名、列别名、用户名、数据库名,完全按照这些制定规则脱敏。这篇文章是提醒大家避免入坑,解决方法还在继续探索中。。。
边栏推荐
- 谷粒商城--环境部署(2022/7/28最新)
- 解决datagrip连接sqlserver报错:[08S01] 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。
- SQL substring_index() usage - MySQL string interception
- sql注入数据库原理详解
- IDEA设置System.out.println()和main方法快捷键
- 你好,我的新名字叫 “铜锁 / Tongsuo”
- C语言力扣第46题之全排列。回溯法
- Fix datagrip connection sqlserver error: [08S01] The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption.
- redis伪集群搭建
- Link with Bracket Sequence II(杭电多校赛)
猜你喜欢
数据分发服务 (DDS) 内置主题
Interview with Ant: How do these technology pioneers do the bottom-level development well?| Excellent technical team interview
Limit injection record of mysql injection in No. 5 dark area shooting range
The difference between typescript3-ts and js
IDEA设置System.out.println()和main方法快捷键
BGP:边界网关路由协议 无类别的路径矢量EGP协议
【Kotlin 中的类和继承】
Get all interface paths and names in the controller
用代码收集每天热点内容信息,并发送到自己的邮箱
实现定时器
随机推荐
2022牛客暑期多校训练营3(ACFGJ)
OA Project Pending Meeting & History Meeting & All Meetings
golang grpc protoc 环境配置
【COCI 2020/2021 Round #2 D】Magneti (DP)
LeetCode:647. 回文子串
39.【vector动态数组定义及初始化】
求大佬解答,这种 sql 应该怎么写?
redis的内存淘汰策略
Keil compile size and storage instructions
mysql URL链接
A magical no main method of code
ES:class 的基本使用
typescript7-typescript常用类型
hcip第八天
redis伪集群搭建
SQL window function
Selected as one of the "Top Ten Hard Core Technologies", explaining the technical points of Trusted Confidential Computing (TECC) in detail
42.【vector简单列题】
typescript4-安装编译ts的工具包
ES:解构