SQL审核
SQL审核功能¶
包括如下功能:
- SQL安全风险审核
- SQL质量风险审核
SQL审核功能以动态库扩展形式实现,用户需在seaboxsql.conf中配置加载sc_sqlcheck
扩展
shared_preload_libraries = 'sc_sqlcheck'
SQL安全风险审核¶
SQL注入攻击分类:
1) SQL重言式攻击(SQL tautology attack
)
重言式WHERE
条件是最高频的SQL注入技术,它指在WHERE
条件中使用了一个恒为真的条件
例如:
WHERE password ='x' OR 'x' = 'x'
WHERE
条件绕过密码认证。
2) 无边界DML
攻击(Unbounded DML statements attack
)
在进行UPDATE
和DELETE
操作时不指定WHERE
条件,这些操作将应用在全表上,属于高危险操作。
Seaboxsql数据库SQL审核模块支持定义保护规则来防范SQL注入攻击:
可使用参数sc_sqlcheck.protect_rules
配置安全风险审核规则
可配置选项包括:
|参数|含义|
|–|–|
|none
|不启用规则|
|deleteall
|全表删除操作检测|
|updateall
|全表更新操作检测|
|tautology
|重言式WHERE条件检测|
|all
|启用全部规则|
SQL质量风险审核¶
Seaboxsql数据库SQL质量审核模块定义了针对SQL
应用的反模式(anti-pattern
)检查
可使用参数sc_sqlcheck.pattern_rules
配置质量审核规则,配置到列表中的规则不允许执行
具体包括:
参数|模式|等级|含义|
|–|–|–|–|
|selectstar|SELECT *
|高|避免使用SELECT *
投影
|primarykey|Primary Key Does Not Exist
|高|主健不存在
|foreignkey|FOREIGN KEY
|高|DDL避免使用FOREIGN KEY
|genericpk|Generic Primary Key
|高|避免使用了通用列名id
|imprecise|Imprecise Data Type
|中|避免使用非精确数据类型
|orderby|ORDER BY RANDOM Usage
|中|使用ORDER BY RANDOM()
将导致不能使用索引
|matching|Pattern Matching Usage
|中|避免使用LIKE
/SIMILAR TO
进行模式匹配
|groupby|GROUP BY Usage
|低|避免在投影列中使用非分组列
|indexorder|Index Attribute Order
|低|索引使用查询ORDER BY顺序定义
|useconcat|String Concatenation
|低|使用COALESCE
连接
|useunion|UNION Usage
|低|如果允许重复值,UNION ALL
是更快的选择
|distinctjoin|DISTINCT & JOIN Usage
|低|使用EXISTS
子查询替代DISTINCT JOIN
|password|Readable Passwords
|低|避免使用明文密码
|havingqual|HAVING Clause Usage
|低|避免使用having语句
|subquery|Nested sub queries
|低|避免使用多层的子查询
|orqual|OR Usage
|低|对于索引列,考虑用IN
替代多个OR
连接
|insertcol|Implicit Column Usage
|低| INSERT VALUES
显式指定列名
|usedistinct|Eliminate Unnecessary DISTINCT Conditions
|低|去除不必要的DISTINCT
条件
|joinqual|JOIN Without Equality Check
|低|使用等值JOIN
关联条件
|usejoin|Reduce Number of JOINs
|低|减少JOIN
连接数
|usenull|NULL Usage
|提示|NULL
查询条件使用提示
|usenotnull|NOT NULL Usage
|提示|NOT NULL
列属性DDL
使用提示
可使用参数sc_sqlcheck.risk_level
配置质量风险审核等级:配置到高于配置等级的模式执行时报警告
可配置选项包括:
|参数|含义|
|–|–|
|none
|不启用|
|low
|低等级|
|medium
|中等级|
|high
|高等级|
|all
|全部等级|
可使用参数sc_sqlcheck.verbose_mode
配置质量风险审核是否提示详细信息。
可配置选项为:on
或off
可使用参数sc_sqlcheck.color_mode
配置质量风险审核是否彩色显示。
可配置选项为:on
或off