GDPR合规规划Skill gdpr-compliance

这个技能提供通用数据保护条例(GDPR)合规规划的全面指南,涵盖合法依据、数据主体权利、数据保护影响评估(DPIA)和实施模式,旨在帮助组织在开发前确保数据处理活动符合GDPR要求。关键词:GDPR,合规,数据隐私,合法依据,数据主体权利,DPIA,隐私设计,数据保护。

数据隐私 0 次安装 0 次浏览 更新于 3/11/2026

名称: gdpr-compliance 描述: GDPR合规规划,包括合法依据、数据主体权利、数据保护影响评估和实施模式 允许工具: 读取、全局、搜索、写入、编辑、任务

GDPR合规规划

在开发开始前,为通用数据保护条例合规提供全面指导。

使用此技能的时机

  • 规划处理欧盟居民个人数据的系统
  • 设计同意管理和偏好中心
  • 实施数据主体权利(访问、删除、可移植性)
  • 进行数据保护影响评估(DPIA)
  • 定义数据处理协议和控制者/处理者关系

GDPR基础知识

七项原则

原则 描述 实施重点
合法性、公平性、透明度 有效的法律依据、公平处理、清晰的隐私通知 同意流程、隐私政策
目的限制 为特定、明确的目的收集 目的跟踪、使用限制
数据最小化 适当、相关、仅限于目的 字段级理由
准确性 保持数据准确和最新 更新机制、验证
存储限制 仅保留必要的时间 保留政策、自动删除
完整性和保密性 适当的安全措施 加密、访问控制
问责制 证明合规性 审计日志、文档化

处理的合法依据

1. 同意 - 自由给予、特定、知情、明确
2. 合同 - 合同履行所必需
3. 法律义务 - 法律要求
4. 重大利益 - 保护某人的生命
5. 公共任务 - 官方权威/公共利益
6. 合法利益 - 与数据主体权利平衡

合法利益评估(LIA):

  1. 目的测试:是否存在合法利益?
  2. 必要性测试:处理是否对该利益必要?
  3. 平衡测试:主体的利益是否优先?

数据主体权利实施

权利清单

权利 描述 响应时间 实施
访问 个人数据副本 1个月 导出端点
更正 纠正不准确数据 1个月 更新端点
删除(“被遗忘权”) 删除个人数据 1个月 删除管道
限制处理 限制数据使用 1个月 处理标志
数据可移植性 机器可读导出 1个月 JSON/CSV导出
反对 停止处理 无不当延迟 退出机制
自动化决策 决策的人为审查 可变 审查队列

.NET实施模式

// 数据主体请求处理
public interface IDataSubjectRequestHandler
{
    Task<DataExport> HandleAccessRequest(Guid subjectId, CancellationToken ct);
    Task HandleErasureRequest(Guid subjectId, ErasureScope scope, CancellationToken ct);
    Task<PortableData> HandlePortabilityRequest(Guid subjectId, string format, CancellationToken ct);
}

public class DataSubjectRequestService : IDataSubjectRequestHandler
{
    private readonly IPersonalDataLocator _dataLocator;
    private readonly IAuditLogger _auditLogger;
    private readonly TimeProvider _timeProvider;

    public async Task<DataExport> HandleAccessRequest(Guid subjectId, CancellationToken ct)
    {
        await _auditLogger.LogRequestReceived(subjectId, "Access", _timeProvider.GetUtcNow());

        var locations = await _dataLocator.LocateAllPersonalData(subjectId, ct);
        var export = new DataExport
        {
            SubjectId = subjectId,
            GeneratedAt = _timeProvider.GetUtcNow(),
            Categories = new List<DataCategory>()
        };

        foreach (var location in locations)
        {
            var data = await location.ExtractData(ct);
            export.Categories.Add(new DataCategory
            {
                Name = location.CategoryName,
                Purpose = location.ProcessingPurpose,
                LawfulBasis = location.LawfulBasis,
                RetentionPeriod = location.RetentionPolicy,
                Data = data
            });
        }

        await _auditLogger.LogRequestCompleted(subjectId, "Access", _timeProvider.GetUtcNow());
        return export;
    }

    public async Task HandleErasureRequest(Guid subjectId, ErasureScope scope, CancellationToken ct)
    {
        // 检查法律保留或保留要求
        var blocks = await CheckErasureBlocks(subjectId, ct);
        if (blocks.Any())
        {
            throw new ErasureBlockedException(blocks);
        }

        var locations = await _dataLocator.LocateAllPersonalData(subjectId, ct);

        foreach (var location in locations)
        {
            if (scope.IncludesCategory(location.CategoryName))
            {
                // 软删除并安排硬删除
                await location.MarkForDeletion(_timeProvider.GetUtcNow().AddDays(30), ct);
            }
        }

        await _auditLogger.LogErasureInitiated(subjectId, scope, _timeProvider.GetUtcNow());
    }
}

同意管理

// 具有细化目的的同意跟踪
public class ConsentRecord
{
    public Guid SubjectId { get; init; }
    public string Purpose { get; init; } = string.Empty;
    public bool IsGranted { get; init; }
    public DateTimeOffset Timestamp { get; init; }
    public string ConsentMechanism { get; init; } = string.Empty; // 例如,“WebForm”、“API”
    public string ConsentVersion { get; init; } = string.Empty; // 同意文本版本
    public string? WithdrawalTimestamp { get; set; }
}

public interface IConsentManager
{
    Task RecordConsent(ConsentRecord consent, CancellationToken ct);
    Task WithdrawConsent(Guid subjectId, string purpose, CancellationToken ct);
    Task<bool> HasValidConsent(Guid subjectId, string purpose, CancellationToken ct);
    Task<IReadOnlyList<ConsentRecord>> GetConsentHistory(Guid subjectId, CancellationToken ct);
}

public class GdprConsentManager : IConsentManager
{
    private readonly IConsentRepository _repository;
    private readonly IEventPublisher _events;

    public async Task<bool> HasValidConsent(Guid subjectId, string purpose, CancellationToken ct)
    {
        var latest = await _repository.GetLatestConsent(subjectId, purpose, ct);

        if (latest is null)
            return false;

        if (latest.WithdrawalTimestamp is not null)
            return false;

        // 检查同意版本是否仍为当前版本
        var currentVersion = await _repository.GetCurrentConsentVersion(purpose, ct);
        if (latest.ConsentVersion != currentVersion)
        {
            // 同意是在旧条款下给出的 - 需要重新同意
            return false;
        }

        return latest.IsGranted;
    }
}

数据保护影响评估(DPIA)

需要DPIA的时机

当处理可能导致高风险时,DPIA是强制性的:

  • 系统性和广泛的画像分析,具有显著影响
  • 特殊类别数据的大规模处理
  • 公共区域的系统监控
  • 具有未知隐私影响的新技术
  • 具有法律/类似影响的自动化决策
  • 儿童数据的大规模处理

DPIA模板结构

## 1. 处理描述
- 性质:您将用数据做什么?
- 范围:多少数据、多少主体、地理区域?
- 背景:影响预期的内部/外部因素?
- 目的:您试图实现什么?

## 2. 必要性和比例性
- 合法依据和理由
- 目的限制评估
- 数据最小化措施
- 数据质量方法
- 存储限制政策

## 3. 风险评估

### 对个人的风险
| 风险 | 可能性 | 严重性 | 得分 | 缓解措施 |
|------|------------|----------|-------|------------|
| 未经授权的访问 | 中 | 高 | 6 | 加密、多因素认证 |
| 数据泄露 | 低 | 关键 | 4 | 监控、事件响应计划 |
| 不准确的画像 | 中 | 中 | 4 | 人为审查 |

### 剩余风险
[应用缓解措施后]

## 4. 咨询
- DPO建议获得:[日期]
- 监管机构咨询:[如需要]
- 数据主体意见考虑:[如何]

## 5. 签署
| 角色 | 姓名 | 批准 | 日期 |
|------|------|----------|------|
| 项目所有者 | | [ ] | |
| DPO | | [ ] | |
| CISO | | [ ] | |

风险评分矩阵

         严重性
         低(1)  中(2)  高(3)  关键(4)
可  高(4)    4      8       12     16
能  中(3)    3      6        9     12
性  低(2)    2      4        6      8
    很低(1)  1      2        3      4

阈值:

  • 1-4:可接受风险
  • 5-8:需要缓解措施
  • 9-12:需要高级批准
  • 13+:咨询监管机构

隐私设计检查清单

架构阶段

  • [ ] 数据流已文档化,个人数据突出显示
  • [ ] 每个数据元素的目的已定义
  • [ ] 每个目的的合法依据已确定
  • [ ] 每个类别的保留期已定义
  • [ ] 访问控制要求已指定
  • [ ] 加密要求已定义
  • [ ] 假名化机会已识别

开发阶段

  • [ ] 同意收集正确实施
  • [ ] 数据主体权利端点已创建
  • [ ] 审计日志捕获处理活动
  • [ ] 数据保留自动化已实施
  • [ ] 静态和传输中加密
  • [ ] 输入验证防止过度收集
  • [ ] 错误消息不泄露个人数据

测试阶段

  • [ ] 同意流程已测试(授予、撤回、重新同意)
  • [ ] 所有数据主体权利端点功能正常
  • [ ] 保留自动化已验证
  • [ ] 访问控制已测试
  • [ ] 审计日志完整且准确
  • [ ] 数据暴露的渗透测试

处理活动记录(ROPA)

第30条要求

控制者必须维护以下记录:

处理活动:客户账户管理
控制者:[组织名称]
DPO联系人:dpo@example.com
目的:
  - 账户认证
  - 订单履行
  - 客户支持
数据主体类别:
  - 客户
  - 潜在客户
个人数据类别:
  - 姓名、电子邮件、电话
  - 地址
  - 订单历史
  - 支付令牌(非卡号)
接收方:
  - 支付处理器(Stripe)
  - 物流提供商(FedEx)
  - 客户支持平台(Zendesk)
国际传输:
  - Stripe Inc.(美国) - SCCs
  - 无安全保障的第三国传输
保留:
  - 活跃账户:关系期间
  - 关闭账户:7年(法律要求)
安全措施:
  - 传输中TLS 1.3
  - 静态AES-256
  - 基于角色的访问控制
  - 定期访问审查

国际数据传输

Schrems II后的传输机制

机制 用例 要求
充分性决定 欧盟批准的国家 无额外要求
标准合同条款(SCCs) 最常见 需要传输影响评估
有约束力的公司规则 集团内传输 监管机构批准
例外(第49条) 偶尔传输 范围有限

传输影响评估(TIA)

## 传输影响评估

### 1. 传输详情
- 导出方:[欧盟实体]
- 导入方:[第三国实体]
- 国家:[列表]
- 数据类型:[类别]
- 传输机制:[SCCs/BCRs等]

### 2. 第三国评估
- 要求向当局披露的法律
- 监控立法
- 法治/司法独立
- 当局的实际访问

### 3. 补充措施
- 技术:[加密、假名化]
- 合同:[附加条款]
- 组织:[政策、培训]

### 4. 结论
- 风险级别:[可接受/需要缓解/不可接受]
- 决策:[继续/修改/暂停]

交叉引用

  • CCPA/CPRA:参见类似概念(披露、删除、退出)
  • AI治理ai-governance技能,用于AI特定要求
  • 安全框架security-frameworks,用于技术控制
  • 数据分类data-classification,用于敏感性级别

资源