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 Research and Development Team
ECOSIREでエンタープライズグレードのデジタル製品を開発。Odoo統合、eコマース自動化、AI搭載ビジネスソリューションに関するインサイトを共有しています。
関連記事
買掛金管理の自動化: 処理コストを 80% 削減
OCR、三者照合、ERP ワークフローを使用して買掛金の自動化を実装し、請求書処理コストを請求書あたり 15 ドルから 3 ドルに削減します。
会計および簿記の自動化における AI: CFO 導入ガイド
AI を使用して請求書処理、銀行調整、経費管理、財務報告のための会計を自動化します。クローズサイクルが 85% 高速化。
ビジネスプロセス自動化のための AI エージェント: チャットボットから自律型ワークフローまで
AI エージェントが、複数ステップの推論とシステム統合により、販売、業務、財務、顧客サービスにわたる複雑なビジネス プロセスをどのように自動化するか。
Compliance & Regulationのその他の記事
監査準備チェックリスト: ERP によって監査が 60% 高速化される方法
ERP システムを使用して監査準備チェックリストを完了します。適切な文書化、管理、自動化された証拠収集により、監査時間を 60% 削減します。
Cookie 同意実装ガイド: 法的に準拠した同意管理
GDPR、eプライバシー、CCPA、および世界的な規制に準拠した Cookie 同意を実装します。同意バナー、Cookie の分類、CMP の統合について説明します。
国境を越えたデータ転送規制: 国際的なデータ フローをナビゲートする
SCC、十分性決定、BCR を使用して国境を越えたデータ転送規制をナビゲートし、GDPR、英国、および APAC 準拠のための転送影響評価を行います。
地域別のサイバーセキュリティ規制要件: グローバル ビジネス向けのコンプライアンス マップ
米国、EU、英国、APAC、中東にわたるサイバーセキュリティ規制をナビゲートします。 NIS2、DORA、SEC ルール、重要なインフラストラクチャ要件、コンプライアンスのタイムラインをカバーします。
データ ガバナンスとコンプライアンス: テクノロジー企業のための完全ガイド
コンプライアンス フレームワーク、データ分類、保持ポリシー、プライバシー規制、テクノロジー企業向けの実装ロードマップを網羅した完全なデータ ガバナンス ガイド。
従業員データのプライバシー管理: 人事ニーズとプライバシー権のバランスをとる
GDPR 要件、人事データ処理根拠、監視ポリシー、国境を越えた転送、保持のベスト プラクティスを使用して従業員データのプライバシーを管理します。