数据权限应用到自定义SQL详解

1.升级到8.25后,项目中心——功能配置中,数据权限应用到自定义SQL功能的作用是什么?

举个例子,下面是一个SQL示例:

with hk as(
select *
from 1h  a
where 1=1
)
SELECT t.* 
FROM hk t
left join (select * from dev.dev_write
where 1=1
and (a0.owner_workcode is not null or a1.owner_workcode is not null )

该SQL中用with 将一个select子查询自己命名为了一个 hk表名,并在下面使用中直接使用hk表名来代替这个子查询。如果开启了数据权限应用到自定义SQL功能,同时该用户受到了数据权限行权限或者列权限的控制的话,有数在下发SQL时,会一块下发查询hk这个表的元信息,但是因为hk是虚构的一张表,所以会报错一个 数据库中的表或视图不存在

数据权限应用到自定义SQL详解 - 图1

2.问题解决办法

  • 如果有用户反馈模型在升级前是正常有数据的,升级到8.25后没做过什么操作报错表或视图不存在的话,并且用admin账号查看没有问题的话,记得检查下项目中心该配置是否是开启的,有一个前置条件就是该用户受到数据权限行权限或者列权限的控制

  • 第二个办法就是把with子查询别命名的那个直接引用到下面,不在用with别命名,sql示例如下:


SELECT t.* 
FROM (
select *
from 1h  a
where 1=1
) t
left join (select * from dev.dev_write
where 1=1
and (a0.owner_workcode is not null or a1.owner_workcode is not null )