SQLCheck - 危ないSQLがないかチェックしよう
システム開発時においてデータベースは欠かせない存在です。しかしその際に利用するSQLはテクニックによってはもの凄いデータが取れる一方、誤ったコーディングによってデータを消失したり抜き取られるリスクがあります。 そこで使ってみたいのがSQLCheckです。問題、リスクあるSQLをあらかじめチェックしましょう。
SQLCheckの使い方
SQLCheckの実行結果です。SQLファイルを渡すだけです。
$ sqlcheck -f /path/to/tmp-publisher.sql
-------------------------------------------------
> RISK LEVEL :: ALL ANTI-PATTERNS
> SQL FILE NAME :: /path/to/tmp-publisher.sql
-------------------------------------------------
==================== Results ===================
-------------------------------------------------
SQL Statement: create table user ( id text primary key, customer_id text, -- customer provided
id email text, phone text, name text, uploaded boolean, created_at bigint,
updated_at bigint );
[/path/to/tmp-publisher.sql]: (HIGH RISK) (LOGICAL_DATABASE_DESIGN ANTI-PATTERN) Multi-Valued Attribute
[Matching Expression: id text]
[/path/to/tmp-publisher.sql]: (HIGH RISK) (LOGICAL_DATABASE_DESIGN ANTI-PATTERN) Generic Primary Key
[Matching Expression: id ]
:
-------------------------------------------------
SQL Statement: create index user_customer_id on user (customer_id);
[/path/to/tmp-publisher.sql]: (LOW RISK) (PHYSICAL_DATABASE_DESIGN ANTI-PATTERN) Index Attribute Order
[Matching Expression: create index]
:
==================== Summary ===================
All Anti-Patterns :: 7
> High Risk :: 4
> Medium Risk :: 0
> Low Risk :: 3
条件によってリスクの高い、中間、低いと判別して結果を出してくれます。SQLにおけるアンチパターンを使ってチェックしてくれますので、システムが実行するSQLログをチェックしてみたりすると改善ポイントが分かるはずです。
SQLCheckはC++製のオープンソース・ソフトウェア(Apache Licnese 2.0)です。
jarulraj/sqlcheck: Automatically identify anti-patterns in SQL queries