
# 创建SQL防御规则 - CreateSqlJobDefendRule
#### 功能介绍
该API用于创建SQL防御规则，拦截匹配规则的SQL。
#### 调试
您可以在[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/DLI/doc?api=CreateSqlJobDefendRule)中调试该接口，支持自动认证鉴权。API Explorer可以自动生成SDK代码示例，并提供SDK代码示例调试功能。
#### 授权信息
账号具备所有API的调用权限，如果使用账号下的IAM用户调用当前API，该IAM用户需具备调用API所需的权限。
- 如果使用角色与策略授权，具体权限要求请参见[权限及授权项说明](https://support.huaweicloud.com/api-dli/dli_02_0375.html)。
- 如果使用身份策略授权，需具备如下身份策略权限。
  
  | 授权项 Action | 访问级别 Access Level | 资源类型（\*为必须） Resource Type (\*: required) | 条件键 Condition Key | 别名 Alias | 依赖的授权项 Dependencies |
  |:---|:---|:---|:---|:---|:---|
  | dli:sqldefendrule:create                | Write                                           | -                                                                      | -                                              | -                                      | -                                                 |
     
  
 
#### URI
POST /v1/{project_id}/sql-defend-rules
表1路径参数 
| 参数         | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                 |
|:---|:---|:---|:---|
| project_id | 是    | String | **参数解释：** 项目编号，用于资源隔离。获取方式请参考[获取项目ID](https://support.huaweicloud.com/api-dli/dli_02_0183.html)。 **约束限制：** 无 **取值范围：** 只能由英文字母和数字组成，且长度为\[1-64\]个字符。 **默认取值：** 无 |
   
#### 请求参数
表2请求参数 
| 参数           | 是否必选 | 参数类型             | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
|:---|:---|:---|:---|
| rule_name    | 是    | String           | **参数解释：** 自定义SQL防御规则名称。 请参考数据湖探索用户指南中"[SQL防御系统规则](https://support.huaweicloud.com/usermanual-dli/dli_01_0612.html)"。 **约束限制：** 最小长度：1 最大长度：32 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| rule_id      | 是    | String           | **参数解释：** 规则ID。请参考[表3]的规则ID。 **约束限制：** 无 **取值范围：** 枚举值的具体含义请参考[表3]。 - static_0001  - static_0002  - static_0003  - static_0004  - static_0005  - static_0006  - static_0007  - dynamic_0001  - dynamic_0002  - running_0002  - running_0003  - running_0004   **默认取值：** 无 |
| category     | 是    | String           | **参数解释：** 规则状态类型。请参考[表3]中的状态类别列。 **约束限制：** 无 **取值范围：** 支持以下枚举值： - static：静态规则  - dynamic：动态规则  - running：熔断规则   **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| engine_rules | 是    | Object           | **参数解释：** 规则支持的动作。请参考[表3]中的支持的动作。 **约束限制：** 无 **取值范围：** 支持以下枚举值： - hint：提示  - intercept：拦截  - fuse：熔断   **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| queue_names  | 否    | Array of strings | 队列名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   
 表3DLI支持的系统防御规则 
| 规则ID         | 规则名称                        | 说明                                           | 类别      | 适用引擎  | 支持的动作                                | 取值说明                                                                                    | 系统默认创建规则 | SQL语句示例                                                                                                                                                                                                                                     | 支持的引擎版本                                               |
|:---|:---|:---|:---|:---|:---|:---|:---|:---|:---|
| dynamic_0001 | Scan files number           | 扫描文件数的限制。                                    | dynamic | spark | 提示 拦截 | 取值范围：1-2000000 默认值：200000                                | 是        | NA                                                                                                                                                                                                                                          | Spark 3.3.1                                           |
| dynamic_0002 | Scan partitions number      | 对单个表操作（select，delete，update，alter）涉及的分区数超限制。 | dynamic | spark | 提示 拦截  | 取值范围：1-500000 默认值：5000                                    | 是        | select \* from 分区表                                                                                                                                                                                                                          | Spark 3.3.1                                           |
| running_0002 | Memory used(MB)             | SQL的占用内存峰值超绝对值限制。                            | running | spark | 熔断                                   | 取值范围：1-8388608                                                                          | 否        | NA                                                                                                                                                                                                                                          | Spark 3.3.1                                           |
| running_0003 | Run time(S)                 | SQL已经运行的时长限制。                                | running | spark | 熔断                                   | 单位：秒 取值范围：1-43200                                           | 否        | NA                                                                                                                                                                                                                                          | Spark 3.3.1                                           |
| running_0004 | Scan data(GB)               | 扫描数据量的限制。                                    | running | spark | 熔断                                   | 单位：GB 取值范围：1-10240                                       | 否        | NA                                                                                                                                                                                                                                          | Spark 3.3.1                                           |
| running_0005 | Shuffle data(GB)            | Shuffle数据量的限制。                               | running | spark | 熔断                                   | 单位：GB 取值范围：1-10240 默认值：2048 | 是        | NA                                                                                                                                                                                                                                          | Spark 3.3.1 Spark 2.4.5 |
| static_0001  | Count(distinct) occurrences | SQL中count(distinct)出现次数限制。                   | static  | spark | 提示 拦截 | 取值范围：1-100 默认值：10                                        | 是        | SELECT COUNT(DISTINCT deviceId), COUNT(DISTINCT collDeviceId) FROM table GROUP BY deviceName, collDeviceName, collCurrentVersion;                                                 | Spark 3.3.1                                           |
| static_0002  | Not in\<Subquery\>          | SQL中是否使用了not in \<subquery\>语句。              | static  | spark | 提示 拦截  | 取值范围：是/否 默认值：是                                          | 是        | SELECT \* FROM Orders o WHERE Orders.Order_ID not in (Select Order_ID FROM HeldOrders h where h.order_id = o.order_id); | Spark 3.3.1                                           |
| static_0003  | Join occurrences            | SQL中的join次数的限制。                              | static  | spark | 提示 拦截   | 取值范围：1-50                                                                               | 否        | SELECT name, text FROM table_1 JOIN table_2 ON table_1.Id = table_2.Id                                                                                                                                                                      | Spark 3.3.1                                           |
| static_0004  | Union occurrences           | SQL中的union all次数的限制。                         | static  | spark | 提示 拦截 | 取值范围：1-100                                                                              | 否        | select \* from tables t1 union all select \* from tables t2 union all select \* from tables t3                                                                                 | Spark 3.3.1                                           |
| static_0005  | Subquery nesting layers     | 子查询嵌套层数的限制。                                  | static  | spark | 提示 拦截   | 取值范围：1-20                                                                               | 否        | select \* from ( with temp1 as (select \* from tables) select \* from temp1);                                                                                                          | Spark 3.3.1                                           |
| static_0006  | Sql size(KB)                | SQL文件大小的限制。                                  | static  | spark | 提示 拦截    | 单位：KB 取值范围：1-1024                                          | 否        | NA                                                                                                                                                                                                                                          | Spark 3.3.1                                           |
| static_0007  | Cartesian product           | 多表关联时笛卡尔积的限制                                 | static  | spark | 提示 拦截  | 取值范围：0-1                                                                                | 否        | select \* from A,B;                                                                                                                                                                                                                         | Spark 3.3.1                                           |
   
#### 响应参数
表4响应参数 
| 参数         | 参数类型    | 描述                       |
|:---|:---|:---|
| is_success | Boolean | 执行请求是否成功。"true"表示请求执行成功。 |
| message    | String  | 系统提示信息，执行成功时，信息可能为空。     |
   
#### 请求示例
```
{
    "rule_name": "r5_5",
    "rule_id": "running_0002",
    "category": "running",
    "engine_rules": {
                "fuse": 5
            },
    "queue_names": [
        "ci_sql", "sqldefend_5"
    ]
}
```
#### 响应示例
无
#### 状态码
| 状态码 | 描述       |
|:---|:---|
| 201 | 创建规则成功   |
| 400 | 请求错误。    |
| 500 | 内部服务器错误。 |
   
#### 错误码
调用接口出错后，将不会返回上述结果，而是返回错误码和错误信息，更多介绍请参见[错误码](https://support.huaweicloud.com/api-dli/dli_02_0056.html)。
