我们公司有如下需求:
- 拦截所有的 SQL 语句,分析获取到表名;
- 对指定的表名添加过滤条件(例:where age>=20)
问题:
- 如何解析 SQL 语句?
- 如何把过滤条件添加进去?不能改变已有的过滤条件。
由于 SQL 太过灵活,很难精确地把过滤条件动态添加上去,
有没有这样的框架?工具类?组件?可以实现此类需求呢?
用的是 Hibernate ORM 持久框架。
我们公司有如下需求:
问题:
由于 SQL 太过灵活,很难精确地把过滤条件动态添加上去,
有没有这样的框架?工具类?组件?可以实现此类需求呢?
用的是 Hibernate ORM 持久框架。
用的是什么 ORM 框架,这块是都可以的
单表还好说一点,多表,复杂查询怎么处理。
以 where age>=20 建视图,将原表名替换为对应的视图名。
不知道能否满足你的需求
Oracle Database Vault。
俩字,花钱。你这样的规则需求,需要额外的功能来保护数据安全。如果认为这些数据价格值这么多钱,那就付钱吧。Oracle Database提供了大量额外付费的扩展产品用来完善各种合规的数据安全访问需求,唯一需要你付出的就是小钱钱。
只要小钱钱到位,你这些需求完全没问题。
有解决方案吗?我这边实现的方案是加注解,因为无论怎么动态,SQL是不变的,所以在dao中加注解就可以了。不过对业务有侵入,需要提前了解要对哪些字段做过滤,还需要把过滤条件相关字段从子查询中挪到外层。这个方案对特殊的查询可能会失效,比如在子查询中分组聚合,过滤字段非聚合字段,这种情况就无能为力了。现在用antlr做SQL解析,这个可能是唯一的办法了。