Decathlon/dblinter
SQL ではなく DB 実体のメタデータを対象とするリント
Python 製
config format: YAML
ルールごとに enabled : boolean で指定
名前、ルールID、パラメータ
メッセージなども context として設定されている
code:config 例.yaml
cluster:
- name: MaxConnectionsByWorkMemIsNotLargerThanMemory
ruleid: C001
enabled: True
params:
- ram: 4000000000
context:
desc: Number of cx (max_connections * work_mem) is not greater than memory.
message: "work_mem * max_connections is bigger than ram."
fixes:
- downsize max_connections or upsize memory.
ルール
4つのルールカテゴリがある
cluster: クラスタ設定検査(例: max_connections * work_mem)
base: データベース全体統計(例: 未使用インデックス率)
schema: スキーマごとのポリシー
table: テーブル単位(PKなし、FKに索引なし、冗長索引など)
ルール例
Cluster(クラスタ設定)
1. max_connections × work_mem がメモリ ram を超えていないかを検出
超過時は接続数削減またはメモリ増強を促す
2. pg_hba.conf に trust または password 認証方式利用行の存在を検出
scram‑sha‑256 や cert などの安全な認証方式の利用と接続元制限を促す
3. password_encryption が md5 で設定されていないかを検出
scram‑sha‑256 への変更とパスワード再設定を促す
Base(データベース全体)
1. PK のないテーブルの割合
PK の付与または閾値調整を促す
2. 冗長なインデックスの割合
重複インデックスの削除または閾値調整を促す
3. 外部キー列にインデックスがないテーブルの割合
外部キー列へのインデックス作成または閾値調整を促す
4. 未使用インデックスの割合
pg_stat_user_indexes
未使用インデックスの削除または閾値調整を促す
5. search_path 上のスキーマで誰でも CREATE 可能な状態を検出
public などへの CREATE 権限の取り消しを促す
6. テーブル名やカラム名に大文字を含むテーブルの割合を算出し閾値超過を検出
大文字不使用の命名へ変更または閾値調整を促す
Schema(スキーマ)
1. スキーマに既定ロール権限 DEFAULT PRIVILEGES が設定されていない状態を検出
既定権限の追加とロール運用の整備を促す
2. スキーマ名が staging stg preprod prod sandbox sbox など環境名でプレフィックスやサフィックスされている状態を検出
環境名はデータベース名で表現しスキーマ名は共通化する運用を促す
Table(テーブル)
1. 対象テーブルに PK がない状態を検出
PK の付与を促す
2. 対象テーブルにインデックスが一つもない状態を検出
必要に応じてインデックス作成を促す
3. 同等カバレッジの冗長インデックスを検出
重複インデックスの整理を促す
4. 外部キー列にインデックスがない状態を検出
該当 FK 用のインデックス作成を促す
5. シーケンシャルスキャンが多くインデックススキャンが少ないテーブルを閾値で検出
索引不足の可能性として調査とインデックス検討を促す
6. 外部参照先が別スキーマにある外部キーを検出
モデル見直しやスキーマ設計の再検討を促す
7. idx_scan が 0 の未使用インデックスをサイズ閾値付きで検出
未使用インデックスの削除を促す
8. 外部キーと参照先でデータ型が一致しない状態を検出
型の整合を取るための定義変更を促す
9. テーブルにロール付与が無い状態を検出
<schema>_ro <schema>_rw などのロール作成と適切な GRANT を促す
10. テーブル名 カラム名 インデックス名で予約語の使用を検出
予約語を避けた名称への変更を促す
11. テーブル名またはカラム名に大文字の使用を検出
小文字ベースの命名への変更を促す
12. 拡張 anon の検出定義に基づき機微情報カラムの存在を検出
非オペレータ向けにマスキングルールの設定を促す
関連
PostgreSQL extension として移植版