数据分类可帮助你根据其敏感度和保护级别对数据进行分类(或分类)。 通过结构 DataClassification ,可以标记敏感信息并基于这些标签强制实施策略。
- DataClassification.TaxonomyName:标识分类系统。
- DataClassification.Value:表示分类中的特定标签。
在某些情况下,您可能需要明确指定数据没有任何数据分类,这可以通过使用 DataClassification.None 来实现。 同样,可能需要指定数据分类未知-在这些情况下使用 DataClassification.Unknown 。
安装软件包
若要开始,请安装 📦 Microsoft.Extensions.Compliance.Abstractions NuGet 包:
dotnet add package Microsoft.Extensions.Compliance.Abstractions
或者,如果使用的是 .NET 10+ SDK:
dotnet package add Microsoft.Extensions.Compliance.Abstractions
创建自定义分类
通过为不同类型的敏感数据创建 static
成员来定义自定义分类。 这为你提供了一种一致的方式来标记和处理应用中的数据。 请考虑以下示例类:
using Microsoft.Extensions.Compliance.Classification;
internal static class MyTaxonomyClassifications
{
internal static string Name => "MyTaxonomy";
internal static DataClassification PrivateInformation => new(Name, nameof(PrivateInformation));
internal static DataClassification CreditCardNumber => new(Name, nameof(CreditCardNumber));
internal static DataClassification SocialSecurityNumber => new(Name, nameof(SocialSecurityNumber));
internal static DataClassificationSet PrivateAndSocialSet => new(PrivateInformation, SocialSecurityNumber);
}
如果要与其他应用共享自定义分类分类,此类及其成员应 public
不是 internal
。 例如,你可以有一个包含自定义分类的共享库,可以在多个应用程序中使用。
DataClassificationSet 允许将多个数据分类组合到单个集中。 这样就可以使用多个数据分类对数据进行分类。 此外,.NET 编辑 API 使用 DataClassificationSet.
注释
将多个数据分类组合在一起作为 DataClassificationSet 时,视为一个单一分类。 可以将它视为逻辑 AND
操作。 例如,如果为分类为DataClassificationSet的PrivateInformation
和SocialSecurityNumber
的数据配置了编辑功能,则它不适用于仅为PrivateInformation
或SocialSecurityNumber
分类的数据。
创建自定义分类属性
基于自定义分类创建自定义属性。 使用这些属性为您的数据标记正确的分类。 请考虑以下自定义属性类定义:
public sealed class PrivateInformationAttribute : DataClassificationAttribute
{
public PrivateInformationAttribute()
: base(MyTaxonomyClassifications.PrivateInformation)
{
}
}
前面的代码声明一个私有信息属性,该属性是类型的子类 DataClassificationAttribute 。 它定义无参数构造函数并将自定义 DataClassification 传递给其 base
。
绑定数据分类设置
若要绑定数据分类设置,请使用 .NET 配置系统。 例如,假设你使用的是 JSON 配置提供程序,则可以定义 appsettings.json ,如下所示:
{
"Key": {
"PhoneNumber": "MyTaxonomy:PrivateInformation",
"ExampleDictionary": {
"CreditCard": "MyTaxonomy:CreditCardNumber",
"SSN": "MyTaxonomy:SocialSecurityNumber"
}
}
}
现在,请考虑以下选项模式方法,该方法将这些配置设置 TestOptions
绑定到对象中:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Compliance.Classification;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Options;
public class TestOptions
{
public DataClassification? PhoneNumber { get; set; }
public IDictionary<string, DataClassification> ExampleDictionary { get; set; } = new Dictionary<string, DataClassification>();
}
class Program
{
static void Main(string[] args)
{
// Build configuration from an external json file.
IConfiguration configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
// Setup DI container and bind the configuration section "Key" to TestOptions.
IServiceCollection services = new ServiceCollection();
services.Configure<TestOptions>(configuration.GetSection("Key"));
// Build the service provider.
IServiceProvider serviceProvider = services.BuildServiceProvider();
// Get the bound options.
TestOptions options = serviceProvider.GetRequiredService<IOptions<TestOptions>>().Value;
// Simple output demonstrating binding results.
Console.WriteLine("Configuration bound to TestOptions:");
Console.WriteLine($"PhoneNumber: {options.PhoneNumber}");
foreach (var item in options.ExampleDictionary)
{
Console.WriteLine($"{item.Key}: {item.Value}");
}
}
}