導入(問題提起)

「誰でも何でもできる」業務システムは、いつか必ず事故を起こします。Excelでのファイル共有からWebシステム開発へ移るタイミングこそ、アクセス制御(権限)と監査ログを“最初から”入れておくべきです。権限が曖昧だと情報漏えい・誤操作・不正の温床になり、監査性がないと原因追跡ができず改善も進みません。本稿は小規模でも効く設計原則と、Pythonでの実装ポイントを詳しく解説します(SEO: Webシステム開発/業務システム/Python/Excel Web化)。

課題の詳細説明

小さな会社で起きがちな“権限と監査”の落とし穴:

  • 承認なしに重要データを更新・削除してしまう(ヒューマンエラー)
  • 退職者や外注アカウントが放置され、無制限アクセスが継続
  • 事故が起きても“誰が・いつ・何をしたか”が辿れず、再発防止できない
  • Excel Web化の過渡期に、Excel側の編集が残って二重系となり、責任境界が曖昧
  • 管理者権限が一元化され、単一障害点(SPOF)になっている

解決方法

権限(Access Control)と監査(Audit)を次の原則に沿って設計します。

  1. 最小権限(Least Privilege):閲覧・登録・承認・管理を明確に分ける
  2. 職務分掌(SoD):作成者と承認者を分け、承認前は公開/反映しない
  3. 監査ログの不可逆化:改ざん困難な形で保存(ハッシュ鎖・外部出力)し、検索・エクスポート容易に
  4. アカウントライフサイクル:入社・異動・退職・外注契約の節目で権限更新/失効を運用に組み込む
  5. 重要操作の多要素:削除・承認・データエクスポートは二要素認証や再パスワード入力を要求

具体例

実装で陥りやすい点と、その対策を示します。

  • ロール設計:rolesテーブル+user_roles中間テーブルでユーザに複数ロールを付与
  • コードの共通化:デコレータ/ミドルウェアで各エンドポイントのロールチェックを一元化
  • モデル監査:各テーブルにcreated_by/updated_by/atを持ち、別にaudit_logsで詳細操作を記録
  • 強い操作の二重確認:削除・承認はパスワード再入力やTOTPを求め、意図しない実行を防止
  • ログの出力:週次で外部ストレージ(S3等)に暗号化エクスポートし、改ざん検知(ハッシュ)を残す

Python Webアプリ(Bottle/FastAPI)なら、少ないコードでこれらを導入できます。Excel Web化の初期から組み込めば、後からの大規模改修を避けられます。

技術的な解説

データモデル(ユーザ/ロール/監査)


CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  email TEXT UNIQUE NOT NULL,
  password_hash TEXT NOT NULL
);

CREATE TABLE roles (
  id INTEGER PRIMARY KEY,
  name TEXT UNIQUE NOT NULL
);

CREATE TABLE user_roles (
  user_id INTEGER,
  role_id INTEGER,
  PRIMARY KEY (user_id, role_id)
);

CREATE TABLE audit_logs (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  user_id INTEGER,
  action TEXT,
  entity TEXT,
  entity_id TEXT,
  at TEXT,
  details TEXT
);

権限チェック(Bottle例)


from bottle import request, abort

def require_roles(*need):
    def deco(fn):
        def wrapper(*a, **kw):
            roles = request.get_header('X-Roles','').split(',')
            if not all(r in roles for r in need):
                abort(403, 'forbidden')
            return fn(*a, **kw)
        return wrapper
    return deco

監査記録の挿入(擬似)


def audit(user_id, action, entity, entity_id, details):
    # DBにINSERT、同時に外部出力キューへ投入(後段でS3書き出し)
    pass

導入の流れ

  1. 業務一覧とアクセス権の洗い出し(閲覧/登録/承認/管理)
  2. ロール設計と職務分掌の定義(承認前の公開可否、二要素の要否)
  3. 実装(共通ミドルウェア、モデル監査、ログ外部出力)
  4. 検証(テストシナリオ:権限越境不可、承認前は見えない、監査追跡可能)
  5. 運用(アカウント棚卸し、退職時失効、ログレビュー)

まとめ

  • 最小権限+承認+監査が“効く基本セット”
  • 実装は共通化して漏れを防止、強い操作は多要素で保護
  • 監査ログは外部出力で不可逆性と可観測性を高める

問い合わせ導線

業務システムの権限設計・監査ログ実装は、お問い合わせよりご相談ください。Webシステム開発の初期からExcel Web化の運用まで伴走します。

Webシステム開発のご相談は monou まで