Compliance & Regulationシリーズの一部
完全ガイドを読むデータ保持ポリシーと自動化: 必要なものを保持し、必要なものを削除
企業は法的に必要なデータよりも平均 33% 多くのデータを保持しており、ストレージ コストと侵害の危険性の両方が増大しています。 データ保持には、法的コンプライアンス、コストの最適化、セキュリティが集約されます。保持しすぎると攻撃対象領域が増加します。保持額が少なすぎると、訴訟ホールドの要件に違反します。
このガイドでは、保持ポリシーの設計、データ タイプ別の法的要件、および手動介入なしで組織のコンプライアンスを維持するための自動適用について説明します。
重要なポイント
- 保存期間は、法的要件、ビジネス ニーズ、プライバシー義務の交差点によって決定されます。
- 自動化された強制が不可欠 --- 手動削除プロセスの失敗率は 40%
- 同じシステム内のデータ型が異なると、保持期間も異なる場合があります
- 訴訟が予想される場合、訴訟ホールドは標準の保持ポリシーをオーバーライドする必要がある
規制による保存期間要件
最小保存要件
| データ型 | GDPR | SOX (米国) | 税法 (さまざま) | ヒパア | 業界標準 |
|---|---|---|---|---|---|
| 財務記録 | 最小値なし(目的制限) | 7年 | 3 ~ 10 年 (国別) | 該当なし | 7年 |
| 従業員記録 | 雇用期間 + 2 ~ 6 年 | 該当なし | 解雇後 3 ~ 7 年 | 該当なし | 解雇から 7 年 |
| 顧客 PII | 目的に必要な限り | 該当なし | 該当なし | 該当なし | 関係が終了 + 2 年になったら削除 |
| 健康記録 | 該当なし | 該当なし | 該当なし | 作成/最終発効日から 6 年 | 州によって異なります (最長 30 年) |
| 税務書類 | 該当なし | 7年 | 3 ~ 10 年 (国別) | 該当なし | 7年 |
| 契約 | 該当なし | 期間 + 7 年 | 該当なし | 該当なし | 期間 + 6 年 (時効) |
| 採用データ | 最大 6 か月 (ベスト プラクティス) | 該当なし | 該当なし | 該当なし | 6~24か月 |
| サポートチケット | 必要な限り | 該当なし | 該当なし | 該当なし | 閉店から3年 |
| 監査ログ | 必要な限り | 7年 | 該当なし | 6年 | 7年 |
| マーケティング同意 | 同意の期間 | 該当なし | 該当なし | 該当なし | 撤退まで+2年 |
国別の税金留保
| 国 | 保存期間 | メモ |
|---|---|---|
| 米国 | 3~7年 | IRS: 通常 3 年、詐欺罪で 7 年 |
| イギリス | 6年 | HMRC 要件 |
| ドイツ | 10年 | EU で最も厳しい |
| フランス | 6 年 (一部の場合は 10 年) | コード・デ・コマース |
| オランダ | 7年 | 財政上の注意 |
| オーストラリア | 5年 | ATO 要件 |
| カナダ | 6年 | CRA 要件 |
| インド | 8年 | 所得税法 |
| アラブ首長国連邦 | 5年 | 連邦税務当局 |
保持スケジュールの設計
ステップ 1: インベントリ データ カテゴリ
| カテゴリー | システム | オーナー | データの例 |
|---|---|---|---|
| 顧客データ | CRM、eコマース、サポート | 販売 | 名前、メールアドレス、注文履歴 |
| 従業員データ | HRIS、給与、福利厚生 | 人事 | SSN、給与、パフォーマンスのレビュー |
| 財務データ | 会計、ERP、銀行 | 金融 | 請求書、領収書、納税申告 |
| マーケティングデータ | 電子メール プラットフォーム、分析 | マーケティング | キャンペーンデータ、同意記録 |
| 製品データ | ERP、eコマース | オペレーション | 製品仕様、価格、在庫 |
| 操作ログ | アプリケーションサーバー、データベース | IT | アクセスログ、エラーログ、監査証跡 |
ステップ 2: 保存期間の割り当て
カテゴリごとに、次の階層を使用して保存期間を決定します。
- 法的最低限度: 法律では何を守る必要がありますか?
- 法的な最大値: 法律では何を削除する必要がありますか? (GDPR目的の制限)
- ビジネス上の必要性: 実際にどのくらいの期間必要ですか?
- リスク許容度: 保存する場合と削除する場合のコストはどれくらいですか?
保存期間は次のとおりです: MAX (法定最小値、ビジネス上の必要性) ただし、法定最大値 (該当する場合) を超えてはなりません。
ステップ 3: 廃棄アクションの定義
| アクション | 説明 | いつ使用するか |
|---|---|---|
| 削除 | すべてのコピーを永久に削除します | 期限切れデータのデフォルト |
| 匿名化 | 識別要素を削除し、集計を維持 | 分析、研究 |
| アーカイブ | 制限された暗号化ストレージに移動 | 訴訟ホールド、コンプライアンスアーカイブ |
| 集計 | 個々のレコードを概要に置き換える | 財務報告 |
自動保存の強制
PostgreSQL の実装
-- Retention policy table
CREATE TABLE retention_policies (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
table_name VARCHAR(100) NOT NULL,
date_column VARCHAR(100) NOT NULL,
retention_days INTEGER NOT NULL,
action VARCHAR(20) NOT NULL, -- 'DELETE', 'ANONYMIZE', 'ARCHIVE'
condition TEXT, -- Optional WHERE clause
enabled BOOLEAN DEFAULT TRUE,
last_run TIMESTAMP,
records_affected INTEGER DEFAULT 0
);
-- Insert policies
INSERT INTO retention_policies (table_name, date_column, retention_days, action, condition) VALUES
('support_tickets', 'closed_at', 1095, 'ANONYMIZE', 'status = ''closed'''),
('recruitment_candidates', 'applied_at', 730, 'DELETE', 'status != ''hired'''),
('session_logs', 'created_at', 90, 'DELETE', NULL),
('newsletter_unsubscribed', 'unsubscribed_at', 365, 'DELETE', NULL),
('audit_logs', 'created_at', 2555, 'ARCHIVE', NULL);
-- Enforcement function
CREATE OR REPLACE FUNCTION enforce_retention_policies()
RETURNS TABLE(policy_id UUID, table_name TEXT, records_affected BIGINT) AS $$
DECLARE
policy RECORD;
affected BIGINT;
query TEXT;
BEGIN
FOR policy IN
SELECT * FROM retention_policies WHERE enabled = TRUE
LOOP
IF policy.action = 'DELETE' THEN
query := format(
'DELETE FROM %I WHERE %I < NOW() - INTERVAL ''%s days''',
policy.table_name, policy.date_column, policy.retention_days
);
IF policy.condition IS NOT NULL THEN
query := query || ' AND ' || policy.condition;
END IF;
ELSIF policy.action = 'ANONYMIZE' THEN
-- Anonymization requires table-specific logic
-- This is a simplified example
query := format(
'UPDATE %I SET email = ''[email protected]'', name = ''Anonymized'' WHERE %I < NOW() - INTERVAL ''%s days''',
policy.table_name, policy.date_column, policy.retention_days
);
IF policy.condition IS NOT NULL THEN
query := query || ' AND ' || policy.condition;
END IF;
END IF;
EXECUTE query;
GET DIAGNOSTICS affected = ROW_COUNT;
UPDATE retention_policies
SET last_run = NOW(), records_affected = affected
WHERE id = policy.id;
RETURN QUERY SELECT policy.id, policy.table_name::TEXT, affected;
END LOOP;
END;
$$ LANGUAGE plpgsql;
スケジュール設定
# Run retention enforcement daily at 3 AM
# /etc/cron.d/retention-enforcement
0 3 * * * postgres psql -d ecosire -c "SELECT * FROM enforce_retention_policies();" >> /var/log/retention-enforcement.log 2>&1
訴訟ホールド
訴訟ホールドが適用される場合
訴訟ホールドは、訴訟が予想される場合、係争中、または進行中の場合に、通常の保持ポリシーを一時停止します。関連する可能性のあるデータはすべて、保持スケジュールに関係なく保存する必要があります。
実装
-- Legal hold table
CREATE TABLE legal_holds (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
matter_name VARCHAR(255) NOT NULL,
description TEXT,
custodians TEXT[], -- Users whose data is held
tables_affected TEXT[], -- Tables where retention is suspended
created_at TIMESTAMP DEFAULT NOW(),
released_at TIMESTAMP,
created_by UUID REFERENCES users(id)
);
-- Modified retention enforcement respects legal holds
CREATE OR REPLACE FUNCTION enforce_retention_with_holds()
RETURNS void AS $$
BEGIN
-- Skip tables under active legal hold
DELETE FROM session_logs
WHERE created_at < NOW() - INTERVAL '90 days'
AND 'session_logs' NOT IN (
SELECT UNNEST(tables_affected)
FROM legal_holds
WHERE released_at IS NULL
);
END;
$$ LANGUAGE plpgsql;
検証とコンプライアンス
毎月の保持監査
- すべての保持ポリシーが文書化されており、最新のものです。
- 自動適用は正常に実行されました (ログを確認してください)
- 保存期間を超えたデータは存在しません(サンプルチェック)
- 訴訟ホールドは係属中のすべての訴訟に対して有効です
- 新しいデータ カテゴリに保存期間が割り当てられました
- サードパーティのプロセッサは保持要件に準拠しています
よくある質問
GDPR に基づいて必要以上にデータを保持するとどうなりますか?
必要な保存期間を超えて個人データを保存することは、GDPR の保存制限原則 (第 5 条(1)(e))に違反します。監督当局は最大2,000万ユーロまたは世界の年間売上高の4%の罰金を課すことができる。より現実的には、過剰なデータにより侵害の危険が増大します。所有すべきではなかったデータに対して責任を負うことになります。
バックアップ コピーの保持はどのように処理すればよいですか?
バックアップには特定の時点のデータのスナップショットが含まれるため、保存が複雑になります。オプション: (1) 最長の保存期間に合わせたスケジュールでバックアップをローテーションする、(2) バックアップを暗号化し、保存期限が切れたら暗号化キーを破棄する (「暗号シュレッディング」)、(3) バックアップに期限切れのデータが含まれる可能性があることを受け入れるが、これを補償制御による技術的制限として文書化します。
Odoo で保持を実装するにはどうすればよいですか?
Odoo には保存の自動化が組み込まれていません。 (1) 古いレコードをアーカイブまたは匿名化するスケジュールされたアクション (cron ジョブ)、(2) 特定のモデルに保持ルールを強制するカスタム モジュール、(3) 一括操作のためのデータベース レベルの関数を使用して実装します。 ECOSIRE は、自動化されたデータ ライフサイクル管理のための Odoo カスタマイズ を提供します。
次に何が起こるか
データ保持は、完全なガバナンス プログラムのコンポーネントの 1 つです。新しいシステムの場合は プライバシー バイ デザイン、人事データの場合は 従業員データのプライバシー、サードパーティ プロセッサの場合は ベンダー契約管理 と組み合わせます。
データ保持ポリシーの設計と実装に関するコンサルティングについては、ECOSIRE にお問い合わせください。
ECOSIRE が発行 -- 企業がライフサイクル全体を通じてデータを管理できるように支援します。
執筆者
ECOSIRE TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
関連記事
会計自動化: 2026 年に手動簿記を廃止
2026 年には、銀行フィードの自動化、レシートのスキャン、請求書の照合、AP/AR の自動化、月末締めの高速化により簿記を自動化します。
ビジネス向け AI エージェント: 決定版ガイド (2026)
ビジネス向け AI エージェントの包括的なガイド: AI エージェントの仕組み、ユースケース、実装ロードマップ、コスト分析、ガバナンス、2026 年の将来のトレンド。
AI エージェント vs RPA: どちらの自動化テクノロジーがあなたのビジネスに適していますか?
LLM を利用した AI エージェントと従来の RPA ボットの詳細な比較 - 機能、コスト、ユースケース、適切なアプローチを選択するための意思決定マトリックス。
Compliance & Regulationのその他の記事
電子商取引のサイバーセキュリティ: 2026 年のビジネスを守る
2026 年の完全な e コマース サイバーセキュリティ ガイド。PCI DSS 4.0、WAF セットアップ、ボット保護、支払い詐欺防止、セキュリティ ヘッダー、およびインシデント対応。
化学産業向け ERP: 安全性、コンプライアンス、バッチ処理
ERP システムが化学会社の SDS 文書、REACH および GHS 準拠、バッチ処理、品質管理、危険物輸送、配合管理をどのように管理するか。
輸出入取引用ERP: 多通貨、物流、コンプライアンス
ERP システムが商社の信用状、税関書類、インコタームズ、多通貨損益計算書、コンテナ追跡、関税計算をどのように処理するか。
ERP を使用した持続可能性と ESG レポート: コンプライアンス ガイド 2026
ERP システムを使用して、2026 年の ESG 報告コンプライアンスをナビゲートします。 CSRD、GRI、SASB、スコープ 1/2/3 排出量、炭素追跡、Odoo の持続可能性をカバーします。
監査準備チェックリスト: 書籍の準備をする
財務諸表の準備状況、裏付け文書、内部統制文書、監査人の PBC リスト、一般的な監査結果を網羅した完全な監査準備チェックリスト。
電子商取引ビジネスのためのオーストラリア GST ガイド
ATO 登録、75,000 ドルの基準値、少額輸入、BAS 申請、デジタル サービスの GST を網羅した、e コマース ビジネス向けのオーストラリア GST 完全ガイド。