分类简介

本主题提供有关分类工作方式的信息。

有关如何使用自定义分类器的信息,请参阅 自定义 Data Classification

本主题内容:

概述

分类是一个多步骤过程,通过分析个人数据的字段和元数据,将 Snowflake 定义的系统标签与列相关联;数据工程师现在可以使用 SQL 和 Snowsight 跟踪这些数据。数据工程师可以对表中的列进行分类,以确定列是否包含某些类型的需要跟踪或保护的数据,例如唯一标识符(护照或银行账户数据)、准标识符(个人居住的城市)或敏感值(个人的工资)。

通过使用系统标签跟踪数据并使用掩码或行访问策略来保护数据,数据工程师可以改进与数据相关的治理方式。分类和数据保护步骤的总体结果是帮助遵守数据隐私法规。

您可以对架构中的单个表或多个表进行分类。Snowflake 提供预定义的 系统标签,使您能够对列进行分类和标记,或者您也可以使用自定义分类器,根据对数据的了解来定义您自己的语义类别。您还可以根据希望采用的治理方式,选择使用 Snowflake 系统标签和自定义分类器的方法。

分类为数据隐私和数据治理管理员提供以下优势:

数据访问:

利用列数据的分类结果,Identity and Access Management 的管理员可以评估和维护其 Snowflake 角色层次结构,以确保 Snowflake 角色对敏感或 PII 数据具有适当的访问权限。

数据共享:

分类过程可以帮助识别和确认 PII 数据的存储位置。随后,数据共享提供商可以使用分类结果来确定是否共享数据,以及如何使 PII 数据可供数据共享使用者使用。

策略应用:

通过使用包含 PII 数据的列(如引用基表中的列以创建视图或物化视图),有助于确定使用掩码策略或行访问策略保护数据的最佳方法。

系统标签和类别

系统标签是由 Snowflake 创建、维护并使其在共享的 SNOWFLAKE 数据库 中可用的标签。有两个分类系统标签,它们都存在于 SNOWFLAKE.CORE 架构中:

  • SNOWFLAKE.CORE.SEMANTIC_CATEGORY

  • SNOWFLAKE.CORE.PRIVACY_CATEGORY

数据工程师将这两个标签分配给包含个人或敏感数据的列。

字符串值:

Snowflake 将列上的系统标签分配存储为键值对,其中值是字符串。Snowflake 为每个分类系统标签定义允许的字符串值,因为 Snowflake 会维护每一个系统标签。

标签名称(SEMANTIC_CATEGORYPRIVACY_CATEGORY)对应于 Snowflake 在列采样过程中分配给列数据的分类类别(即标签名称和类别名称的用词相同):

语义类别:

语义类别标识个人属性。

分类支持许多个人属性,其中包括姓名、年龄和性别等。将 SEMANTIC_CATEGORY 标签分配给列时,这三个属性是可能的字符串值。

分类可以检测来自不同国家/地区的信息,如澳大利亚、加拿大和英国。例如,如果表列包含电话号码信息,则分析过程可以区分这些国家/地区的不同电话号码值。

隐私类别:

如果分析确定列数据对应于语义类别,则 Snowflake 会进一步将列分类到隐私类别。隐私类别有三个值:标识符、准标识符和敏感。这三个值是在将 PRIVACY_CATEGORY 分类系统标签分配给列时可以指定的字符串值。

  • 标识符:此属性唯一地标识一个人。示例属性包括姓名、社会安全号码和电话号码。

    标识符属性与 直接标识符 同义。

  • 准标识符:当两个或多个准标识符属性组合起来时,可以唯一地标识一个人。示例属性包括年龄和性别。

    准标识符与 间接标识符 同义。

  • 敏感:此属性不足以标识一个人,但个人出于隐私原因不愿透露具有此属性的信息。

    目前,Snowflake 评估为敏感的唯一属性是薪水。

  • 不敏感:这些属性不包含个人信息或敏感信息。

下表汇总了每个分类类别和系统标签之间的关系,以及每个分类系统标签的字符串值。Snowflake 支持与特定国家/地区相关的国际 SEMANTIC_CATEGORY 标签值。国家/地区代码基于 ISO-3166-1 alpha-2 (link removed) 标准。其他语义类别(例如 EMAILGENDER)没有国家/地区代码。为了跟踪国际信息,数据工程师在设置列上的系统标签时使用 SEMANTIC_CATEGORY 标签值列中的值。

PRIVACY_CATEGORY 值

SEMANTIC_CATEGORY 值

支持的国家/地区

IDENTIFIER

  • BANK_ACCOUNT

  • DRIVERS_LICENSE

  • MEDICARE_NUMBER

  • NATIONAL_IDENTIFIER

  • ORGANIZATION_IDENTIFIER

  • PASSPORT

  • PHONE_NUMBER

  • STREET_ADDRESS

  • TAX_IDENTIFIER

  • EMAIL

  • IBAN

  • IMEI

  • IP_ADDRESS

  • NAME

  • PAYMENT_CARD

  • URL

  • VIN

  • CA、NZ、US

  • AU、CA、US

  • AU、NZ

  • CA、GB、NZ、SG、US

  • AU、NZ、SG

  • AU、CA、NZ、SG、US

  • AU、CA、GB、JP、US

  • CA、US

  • AU、NZ

QUASI_IDENTIFIER

  • ADMINISTRATIVE_AREA_1

  • ADMINISTRATIVE_AREA_2

  • CITY

  • POSTAL_CODE

  • AGE

  • COUNTRY

  • DATE_OF_BIRTH

  • ETHNICITY

  • GENDER

  • LAT_LONG

  • LATITUDE

  • LONGITUDE

  • MARITAL_STATUS

  • OCCUPATION

  • YEAR_OF_BIRTH

  • CA、NZ、US

  • US

  • CA、NZ、US

  • AU、CA、CH、GB、JP、NZ、US

SENSITIVE

  • SALARY

备注

来自所有三个隐私类别的多个语义标签字符串值可以被视为“敏感个人数据”、“特殊类别数据”或法规指明的类似术语,并且可能需要额外的保护或控制。

目前,分类不会将列数据标记为敏感和识别。换句话说,在给定列上设置系统标签时,必须选择 SEMANTIC_CATEGORY 或 PRIVACY_CATEGORY 标签。

支持的对象和数据类型

Snowflake 支持对存储在所有类型的表和视图中的数据进行分类,其中包括外部表、物化视图和安全视图。

您可以对所有支持的 数据类型 的表列和视图列进行分类,但下列数据类型 除外

  • GEOGRAPHY

  • BINARY

  • VARIANT

    请注意,当列数据类型可以 强制转换 为 NUMBER 或 STRING 数据类型时,可以使用 VARIANT 数据类型对列进行分类。如果列包含 JSON、XML 或其他半结构化数据,Snowflake 不会对列进行分类。

如果表包含不属于受支持的数据类型的列,或者列包含所有 NULL 值,则分类过程将忽略这些列,并且不会将其包含在输出中。

重要

如果数据表示 NULL 值,但数据的值不是 NULL,则分类结果的准确性可能会受到影响。

计算成本

分类过程需要计算资源,这些资源由执行分类时正在使用和运行的 虚拟仓库 提供。

对表/视图中的数据进行分类所需的时间量(以及仓库使用的 Credit)是要分类的数据量的函数。

特别是,如果表或视图具有大量支持分类的列,则处理时间可能会受到影响。然而,一般来说,处理速度与仓库大小呈线性变化关系。换句话说,仓库每次变大(从超小变为小)通常会使处理时间缩短一半。

使用以下一般准则选择 仓库大小

  • 无需担心处理时间:超小型仓库。

  • 表中最多有 100 列:小型仓库。

  • 表中有 101 到 300 列:中型仓库。

  • 表中有 301 列或更多列:大型仓库。

有关详细信息,请参阅 仓库注意事项

建议

要利用分类功能并优化 PII 数据跟踪功能,请执行以下操作:

验证:

首先查询 Account Usage 视图:

使用查询结果确定分类系统标签的架构级或数据库级分配的优先次序。

列名称:

在表对象和训练表创建器中使用合理的列名,以遵守内部表创建指南。

数据类型:

使用合理的列数据类型。例如, AGE 列应具有 NUMBER 数据类型。

VARIANT:

如果列具有 VARIANT 数据类型,请在将表分类之前对列使用 FLATTEN 命令。

仓库:

将数据分类时,使用适当的仓库大小。有关详细信息,请参阅 计算成本 (本主题内容)。

管理分类

权限引用

Data Classification 的权限模型使数据隐私管理员能够确定可以对表和标签列进行分类的角色。例如,单个角色可以具有所有必要的权限,或者,数据隐私管理员可以将授权委派给不同的角色以满足职责分离 (SoD) 要求。使用 Data Classification开始数据分类 部分展示了一个可行的授权组合示例。

作为管理员,您可以选择不同选项,具体取决于您希望如何管理涉及的角色。这些选项可让您灵活采用所需的治理方式。例如:

  • 表所有者(具有表的 OWNERSHIP 权限)可以对表进行分类并在列上设置系统标签。

  • 自定义角色具有表的 SELECT 权限和账户的 APPLY TAG 权限,可以对表进行分类并在列上设置系统标签。

  • 如果您希望不同的角色参与对列进行分类和标记,则可以向一个角色授予表的 SELECT 权限,并向其他角色授予账户的 APPLY TAG 权限。

下表总结了用于对表进行分类、在列上设置 Data Classification 系统标签,以及同时执行这两项任务的不同授权选项:

权限或角色

对表进行分类

在列上设置系统标签

表格或视图的 SELECT。

表的 OWNERSHIP。

账户的 APPLY TAG。

ACCOUNTADMIN 角色。

数据库或架构的 OWNERSHIP。

重要

  • 对表进行分类需要一个正在运行的仓库。用于对表进行分类的角色必须至少具有仓库的 USAGE 权限。

  • 您可以向账户角色授予 SNOWFLAKE.GOVERNANCE_VIEWER 数据库角色,使具有该账户角色的用户能够查询 DATA_CLASSIFICATION_LATEST 视图,以查看分类表的最新结果。

跟踪系统标签

Snowflake 提供了内置的视图和函数,可跟踪分类系统标签的使用情况:

  • 要查找账户中带有系统标签的列,请查询 Account Usage TAG_REFERENCES 视图:

    SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.TAG_REFERENCES
        WHERE TAG_NAME = 'PRIVACY_CATEGORY'
        ORDER BY OBJECT_DATABASE, OBJECT_SCHEMA, OBJECT_NAME, COLUMN_NAME;
    
    Copy
  • 要在特定数据库中查找表或视图的带有系统标签的列,请调用 TAG_REFERENCES Information Schema 表函数:

    SELECT * FROM
      TABLE(
        MY_DB.INFORMATION_SCHEMA.TAG_REFERENCES(
          'my_db.my_schema.hr_data.fname',
          'COLUMN'
        ));
    
    Copy
  • 要查找在特定数据库的表或视图中的每列上设置的每个标签,请调用 Information Schema TAG_REFERENCES_ALL_COLUMNS 表函数:

    SELECT * from
      TABLE(
        MY_DB.INFORMATION_SCHEMA.TAG_REFERENCES_ALL_COLUMNS(
          'my_db.my_schema.hr_data',
          'table'
        ));
    
    Copy
  • 要查找列的特定标签值,请调用 SYSTEM$GET_TAG 系统函数:

    SELECT SYSTEM$GET_TAG(
      'SNOWFLAKE.CORE.PRIVACY_CATEGORY',
      'hr_data.fname',
      'COLUMN'
      );
    
    Copy
语言: 中文