跳转至

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)

在进行UPDATEDELETE操作时不指定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配置质量风险审核是否提示详细信息。

可配置选项为:onoff

可使用参数sc_sqlcheck.color_mode配置质量风险审核是否彩色显示。

可配置选项为:onoff