文章 查看内容

如何通过元数据库查询数据集的数据安全模块开通情况?

如何通过元数据库查询数据集的数据安全模块开通情况?

55 0 产品实操 2026-5-14 15:41 发布者: 观小豪

历史已经设置了很多数据行列权限,受调整用户及以用户组影响,更新用户及用户组后,担心行列权限受影响,需要批量查询及备份。但是目前没有界面可以批量导出或者批量查询,只能凭印象,所以希望通过元数据库查询数据 ...
一、背景说明:
历史已经设置了很多数据行列权限,受调整用户及以用户组影响,更新用户及用户组后,担心行列权限受影响,需要批量查询及备份。但是目前没有界面可以批量导出或者批量查询,只能凭印象,但目前数据集太多,甚至有几百上千个,统计工作量很大,所以希望通过元数据库查询数据集的数据安全模块开通情况。

二、SQL 方案:
1、过滤版 SQL方案:只返回已开启数据安全的数据集,适合快速盘点当前命中对象。
SELECT
    ds.dom_id,
    ds.ds_id,
    ds.name,
    ds.sf_template_id,
    tpl.name AS template_name,
    CASE
        WHEN COALESCE(ds.sf_template_id, '') <> '' THEN 'TEMPLATE'
        ELSE 'DIRECT'
    END AS security_source,
    CASE
        WHEN COALESCE(ds.sf_template_id, '') <> ''
            THEN JSON_UNQUOTE(JSON_EXTRACT(tpl.content, '$.securityFilterRowLevelEnabled'))
        ELSE JSON_UNQUOTE(JSON_EXTRACT(ds.config, '$.securityFilterRowLevelEnabled'))
    END AS row_enabled,
    CASE
        WHEN COALESCE(ds.sf_template_id, '') <> ''
            THEN JSON_UNQUOTE(JSON_EXTRACT(tpl.content, '$.securityFilterColumnLevelEnabled'))
        ELSE JSON_UNQUOTE(JSON_EXTRACT(ds.config, '$.securityFilterColumnLevelEnabled'))
    END AS column_enabled,
    ds.utime
FROM data_source ds
LEFT JOIN security_filter_template tpl
    ON ds.dom_id = tpl.dom_id
   AND ds.sf_template_id = tpl.template_id
   AND tpl.is_del = 0
WHERE ds.is_del = 0
  AND (
      (
        COALESCE(ds.sf_template_id, '') <> ''
        AND (
            JSON_UNQUOTE(JSON_EXTRACT(tpl.content, '$.securityFilterRowLevelEnabled')) = 'true'
            OR JSON_UNQUOTE(JSON_EXTRACT(tpl.content, '$.securityFilterColumnLevelEnabled')) = 'true'
        )
      )
      OR
      (
        COALESCE(ds.sf_template_id, '') = ''
        AND (
            JSON_UNQUOTE(JSON_EXTRACT(ds.config, '$.securityFilterRowLevelEnabled')) = 'true'
            OR JSON_UNQUOTE(JSON_EXTRACT(ds.config, '$.securityFilterColumnLevelEnabled')) = 'true'
        )
      )
  )
ORDER BY ds.utime DESC;
BI数据集过滤版数据结构详情图:


2、全量打标版 SQL方案:返回全部数据集,并增加 security_enabled / security_source / row_enabled / column_enabled 等字段,适合后续抽取为 BI 数据集继续筛选、统计和分析。
SELECT
    ds.dom_id,
    ds.ds_id,
    ds.name,
    ds.sf_template_id,
    tpl.name AS template_name,
    CASE
        WHEN COALESCE(ds.sf_template_id, '') <> '' THEN 'TEMPLATE'
        ELSE 'DIRECT'
    END AS security_source,
    CASE
        WHEN COALESCE(ds.sf_template_id, '') <> ''
            THEN JSON_UNQUOTE(JSON_EXTRACT(tpl.content, '$.securityFilterRowLevelEnabled'))
        ELSE JSON_UNQUOTE(JSON_EXTRACT(ds.config, '$.securityFilterRowLevelEnabled'))
    END AS row_enabled,
    CASE
        WHEN COALESCE(ds.sf_template_id, '') <> ''
            THEN JSON_UNQUOTE(JSON_EXTRACT(tpl.content, '$.securityFilterColumnLevelEnabled'))
        ELSE JSON_UNQUOTE(JSON_EXTRACT(ds.config, '$.securityFilterColumnLevelEnabled'))
    END AS column_enabled,
    CASE
        WHEN
            (
                CASE
                    WHEN COALESCE(ds.sf_template_id, '') <> ''
                        THEN JSON_UNQUOTE(JSON_EXTRACT(tpl.content, '$.securityFilterRowLevelEnabled'))
                    ELSE JSON_UNQUOTE(JSON_EXTRACT(ds.config, '$.securityFilterRowLevelEnabled'))
                END = 'true'
            )
            OR
            (
                CASE
                    WHEN COALESCE(ds.sf_template_id, '') <> ''
                        THEN JSON_UNQUOTE(JSON_EXTRACT(tpl.content, '$.securityFilterColumnLevelEnabled'))
                    ELSE JSON_UNQUOTE(JSON_EXTRACT(ds.config, '$.securityFilterColumnLevelEnabled'))
                END = 'true'
            )
        THEN 'true'
        ELSE 'false'
    END AS security_enabled,
    ds.row_count,
    ds.col_count,
    ds.utime
FROM data_source ds
LEFT JOIN security_filter_template tpl
    ON ds.dom_id = tpl.dom_id
   AND ds.sf_template_id = tpl.template_id
   AND tpl.is_del = 0
WHERE ds.is_del = 0
ORDER BY ds.utime DESC;
BI数据集全量版数据结构详情图:


3、字段释义:
为便于后续抽取、验证与向客户或内部同学解释结果,下表对 SQL 中输出的核心字段做统一说明。其中,过滤版 SQL 与全量打标版 SQL 的主字段基本一致;全量打标版额外增加了 security_enabled 这一综合打标字段。

字段名

含义说明

dom_id

ID,用于区分租户/空间,避免不同域的数据集混在一起。

ds_id

数据集唯一标识,用于定位具体数据集。

name

数据集名称,便于人工识别。

sf_template_id

数据安全模板 ID;有值表示该数据集可能通过模板下发数据安全配置。

template_name

数据安全模板名称,用于说明绑定的是哪一个模板。

security_source

数据安全来源;TEMPLATE 表示模板配置,DIRECT 表示直接配置在数据集上。

row_enabled

行权限是否开启;true 表示开启,false 表示未开启。

column_enabled

列权限是否开启;true 表示开启,false 表示未开启。

security_enabled

综合打标字段;行权限或列权限任一为 true,则该字段为 true

row_count

数据集记录行数,来自 data_source.row_count

col_count

数据集字段列数,来自 data_source.col_count

utime

数据集元数据最近更新时间,可用于排序和排查近期变更。


三、结果解读建议
1)若 security_enabled = 'true',表示该数据集当前已开通数据安全。
2)若 security_source = 'TEMPLATE',表示该数据集的数据安全配置来自模板下发;此时 row_enabled / column_enabled 应以 security_filter_template.content 中的开关解释。
3)若 security_source = 'DIRECT',表示该数据集直接在自身配置中开启了数据安全;此时 row_enabled / column_enabled 应以 data_source.config 中的开关解释。
4)若 row_enabled 与 column_enabled 均为 false,则 security_enabled 应为 false,这类数据集虽然存在于全量打标版 SQL 中,但不属于已开通数据安全对象。

路过

雷人

握手

鲜花

鸡蛋

评论

您需要登录后才可以发表言论 登录立即注册
微信服务号
联系我们
电话:400-880-0750
邮箱:hello@guandata.com
Copyright © 2001-2026 观远社区 版权所有 All Rights Reserved. 浙 ICP 备15006424号-3
去评论 去发文 返回顶部
返回顶部