Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La classificazione dei dati consente di classificare (o classificare) i dati in base al livello di riservatezza e protezione. La DataClassification struttura consente di etichettare le informazioni riservate e applicare criteri basati su queste etichette.
- DataClassification.TaxonomyName: identifica il sistema di classificazione.
- DataClassification.Value: rappresenta l'etichetta specifica all'interno della tassonomia.
In alcune situazioni, potrebbe essere necessario specificare che i dati in modo esplicito non hanno alcuna classificazione dei dati, questo risultato viene ottenuto con DataClassification.None. Analogamente, potrebbe essere necessario specificare che la classificazione dei dati è sconosciuta. In questi casi, usare DataClassification.Unknown .
Installare il pacchetto
Per iniziare, installare il 📦 pacchetto NuGet Microsoft.Extensions.Compliance.Abstractions :
dotnet add package Microsoft.Extensions.Compliance.Abstractions
Oppure, se stai utilizzando il SDK di .NET 10+
dotnet package add Microsoft.Extensions.Compliance.Abstractions
Creare classificazioni personalizzate
Definire classificazioni personalizzate creando static membri per diversi tipi di dati sensibili. In questo modo è possibile etichettare e gestire i dati nell'app in modo coerente. Si consideri la classe di esempio seguente:
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);
}
Se si vuole condividere la tassonomia di classificazione personalizzata con altre app, questa classe e i relativi membri devono essere public invece di internal. Ad esempio, è possibile avere una libreria condivisa contenente classificazioni personalizzate, che è possibile usare in più applicazioni.
DataClassificationSet consente di comporre più classificazioni di dati in un singolo set. In questo modo è possibile classificare i dati con più classificazioni di dati. Inoltre, le API di redaction .NET usano un oggetto DataClassificationSet.
Annotazioni
Più classificazioni di dati che vanno insieme come un DataClassificationSet vengono considerate come una singola classificazione. È possibile considerarlo come un'operazione logica AND . Ad esempio, se è stata configurata la redazione per dati classificati come DataClassificationSet di PrivateInformation e SocialSecurityNumber, non si applicherà ai dati classificati solo come PrivateInformation o solo SocialSecurityNumber.
Creare attributi di classificazione personalizzati
Creare attributi personalizzati in base alle classificazioni personalizzate. Usare questi attributi per contrassegnare i dati con la classificazione corretta. Si consideri la definizione di classe dell'attributo personalizzata seguente:
public sealed class PrivateInformationAttribute : DataClassificationAttribute
{
public PrivateInformationAttribute()
: base(MyTaxonomyClassifications.PrivateInformation)
{
}
}
Il codice precedente dichiara un attributo di informazioni private, ovvero una sottoclasse del DataClassificationAttribute tipo. Definisce un costruttore senza parametri e passa il DataClassification personalizzato al suo base.
Associare le impostazioni di classificazione dei dati
Per associare le impostazioni di classificazione dei dati, usare il sistema di configurazione .NET. Si supponga, ad esempio, di usare un provider di configurazione JSON, il appsettings.json può essere definito come segue:
{
"Key": {
"PhoneNumber": "MyTaxonomy:PrivateInformation",
"ExampleDictionary": {
"CreditCard": "MyTaxonomy:CreditCardNumber",
"SSN": "MyTaxonomy:SocialSecurityNumber"
}
}
}
Si consideri ora l'approccio del modello di opzioni seguente, che associa queste impostazioni di configurazione all'oggetto 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}");
}
}
}