联 系 我 们
售前咨询
售后咨询
微信关注:星环科技服务号
更多联系方式 >
6.6.3.2 规则编写规范
更新时间:4/9/2025, 9:33:22 AM

SQL 阻断审核规则,支持 jsontable 两种读取方式(通过设置参数 quark.sql.inspection.read.method 进行指定),下面向您依次介绍这两种方式对应的规则信息编写方式。

JOSN 规则文件

SQL 规则文件的后缀名必须为 .rule,并使用 JSON 语言进行书写。每个 JSON 规则文件只包含一条规则,文件中包含一个 content 即为一条完整的规则,content 内可包含多个具体审核规则且互为 and 关系。

审核参数

在编写 JSON 审核规则文件时,每个文件中需要包含以下审核参数。

参数名称 取值范围 说明 必需项

type

select/global/field

用于区分 SQL 审核规则类型。本参数用于界定该 json 文件是否为规则文件。

database

数据库集合

指定 SQL 审核生效的目标数据库表,支持 db.* 的通配符形式。

user

用户集合

指定该 SQL 审核规则生效的目标用户,“*” 通配符指定所有用户,空集 “[]”不匹配任何用户,

content

具体的规则集合

审核规则的具体内容,具体规则类型对应支持的审核规则,请参考 SQL 审核规则进行书写 。 本参数用于界定 json 文件是否为规则文件。

Database 与 Column 书写格式

  • database 字段支持多种写法如下

    写法一:
    "database": [
        "db1.t1",
        "db1.t2"
        "db2.*"
    ]
    复制
    写法二:
    "database": {
        "db1": [
            "t1",
            "t2",
            "t3"
        ],
        "db2": [
            "*"
        ]
    }
    复制
  • field 规则类型中,column 参数支持以下两种写法:

    写法一:
    "column": [
        "db1.t1.col1",
        "db1.t1.col2"
        "db1.t2.col3"
        "db1.t3.*",
        "db2.*.*"
    ]
    复制
    写法二:
    "column": {
        "db1": {
            "t1": [
                "col1",
                "col2"
            ],
            "t2": [
                "col3"
            ],
            "t3": [
                "*"
            ]
        },
        "db2": [
            "*"
        ]
    }
    复制
书写示例

示例 1:

{
    "type": "select",
    "user": [
        "user1",
        "user2"
    ],
    "database": {
        "db1": [
            "tableName1",
            "tableName2"
        ],
        "db2": ["*"]
    },
    "content": {
        "where": {
            "exist": true,
            "matchType": "any",
            "function": [
                "like",
                "between",
                "in"
            ]
        },
        "limit": {
            "exist": true,
            "limit": 10,
            "offset": 10
        },
        "groupby": {
            "exist": true
        },
        "sortby": {
            "exist": true
        },
        "orderby": {
            "exist": true
        }
    }
}
复制
  • type:指定需要阻断的具体规则类型,此处为 select。

  • user:指定该规则生效的目标用户为 user1、user2。

  • database:指定该规则生效的目标表为 db1.tableName1、db1.tableName2 以及 db2 中的所有表

  • content:定义具体的 SQL 审核规则,包含对 SQL 语句中不同部分的审核条件。具体规则请参考 SQL 规范审核规则

    当查询 SQL 语句中同时匹配以下全部规则时,则阻止该 SQL 语句,

    • WHERE 条件中包含 like、between 或 in 函数

    • LIMIT 值大于或等于 10,或者 OFFSET 值大于或等于 10

    • 语句中包含 Group BY

    • 语句中包含 Sort By

    • 语句中包含 Order By

  • 以上规则将会阻止以下 SQL 语句执行。

    SELECT * FROM db1.tableName1
    WHERE name LIKE '%pattern%'
    UNION ALL
    SELECT * FROM db1.tableName2
    WHERE salary BETWEEN 50000 AND 100000
    SORT BY salary
    UNION ALL
    SELECT * FROM db1.tableName3
    GROUP BY position
    ORDER BY salary DESC
    LIMIT 15 OFFSET 12;
    复制

示例 2:

{
    "type": "field",
    "user": [
        "user1",
        "user2"
    ],
    "database": ["*"],
    "content": {
        "select": {
            "column": [
                "a",
                "b",
                "c"
            ]
        },
        "join": {
            "column": [
                "a",
                "b",
                "c"
            ]
        }
    }
}
复制
  • type:指定 SQL 审核规则的规则类型,此处为 field。

  • user:指定该规则生效的目标用户为 user1、user2。

  • database:指定该规则生效的目标数据库为所有数据库。

  • content:定义具体的 SQL 字段审核规则及目标 column 字段对象。包含对 SQL 语句中不同部分的审核条件。具体规则请参考 SQL 字段审核规则

    当查询 SQL 语句中同时匹配以下全部规则时,则阻止该 SQL 语句

    • SELECT 查询的目标列存在列 a、b、c;

    • JOIN 关联条件中包含列 a、b、c。

  • 以上规则将会阻止以下 SQL 语句执行。

    SELECT * FROM table1 JOIN table2 ON table1.b = table2.b;
    复制
规则审核表

若您选择 table 作为 SQL 阻断审核规则的读取方式,那么您需要向对应的规则表中插入对应的规则数据。审核规则表默认通过 DBLink 存储在元数据库中 system_dblink,仅支持使用 INSERT INTO … SELECT 插入。下面向您介绍规则审核表结构。

基本参数表

sql_inspection_common 存放一个 SQL 审核规则的基本信息,

表 20. sql_inspection_common
字段名称 类型 字段说明 是否非空

name

string

规则名称,不可重复

非空

type

string

规则类型,如 select/global/field 等

非空

user

string

用户名,逗号分割,使用 * 表示全员匹配,含逗号用户名使用单引号标注

示例:anonymous,123,'1,2'

非空

database

string

指定 SQL 审核规则生效的目标数据库表,使用 database.table 的格式存储,逗号分隔。

示例:db1.t1,db2.*

非空

comment

string

存放备注信息

规则细节表

sql_inspection_rule 表中存放具体的 SQL 审核规则信息,相同 base 值的数据共同组成一个 SQL 规则的具体审核规则,且互为 and 关系。

表 21. sql_inspection_rule
字段名称 类型 字段说明 非空字段

base

string

外键,指向对应规则的在基本参数表 sql_inspection_common 中的 name,用于区分该条数据的所属规则

非空

keyword

string

关键字,如 where/limit/groupby 等

非空

key

string

子规则 key

非空

value

string

子规则 value