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