Uso della crittografia
Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure database SQL di Azure Synapse Analytics in Microsoft Fabric
In SMO la chiave master del servizio è rappresentata dall'oggetto ServiceMasterKey. A questo oggetto fa riferimento la proprietà ServiceMasterKey dell'oggetto Server. La chiave può essere rigenerata tramite il metodo Regenerate.
La chiave master del database è rappresentata dall'oggetto MasterKey. La proprietà IsEncryptedByServer indica se la chiave master del database viene crittografata o meno tramite la chiave master del servizio. La copia crittografata nel database master viene aggiornata automaticamente ogni volta che viene modificata la chiave master del database.
È possibile eliminare la crittografia della chiave del servizio utilizzando il metodo DropServiceKeyEncryption e crittografare la chiave master del database con una password. In questo caso sarà necessario aprire in modo esplicito la chiave master del database prima di accedere a chiavi private protette dalla chiave master.
Quando un database viene collegato a un'istanza di SQL Server, è necessario specificare la password per la chiave master del database oppure eseguire il AddServiceKeyEncryption metodo per rendere disponibile una copia non crittografata della chiave master del database per la crittografia con la chiave master del servizio. Si consiglia di eseguire questo passaggio per evitare la necessità di aprire in modo esplicito la chiave master del database.
Il metodo Regenerate rigenera la chiave master del database. In seguito alla rigenerazione della chiave master del database, tutte le chiavi crittografate con tale chiave vengono decrittografate e successivamente crittografate con la nuova chiave master del database. Il metodo DropServiceKeyEncryption rimuove l'impostazione per la crittografia della chiave master del database tramite la chiave master del servizio. AddServiceKeyEncryption con una copia della chiave master viene crittografata utilizzando la chiave master del servizio e archiviata sia nel database corrente che nel database master.
In SMO i certificati sono rappresentati dall'oggetto Certificate. L'oggetto Certificate dispone di proprietà che specificano la chiave pubblica, il nome dell'oggetto, il periodo di validità e le informazioni sull'autorità emittente. L'autorizzazione per l'accesso al certificato è controllata tramite i metodi Grant, Revoke e Deny .
Esempio
Per gli esempi di codice seguenti, è necessario selezionare l'ambiente, il modello e il linguaggio di programmazione per la creazione dell'applicazione. Per altre informazioni, vedere Creare un progetto SMO di Visual C# in Visual Studio .NET.
Aggiunta di un certificato in Visual C#
Nell'esempio di codice viene creato un certificato semplice con una password di crittografia. A differenza di altri oggetti, il metodo Create dispone di diversi overload. L'overload utilizzato nell'esempio crea un nuovo certificato con una password di crittografia.
{
//Connect to the local, default instance of SQL Server.
{
Server srv = new Server();
//Reference the AdventureWorks2022 database.
Database db = srv.Databases["AdventureWorks2022"];
//Define a Certificate object variable by supplying the parent database and name in the constructor.
Certificate c = new Certificate(db, "Test_Certificate");
//Set the start date, expiry date, and description.
System.DateTime dt;
DateTime.TryParse("January 01, 2010", out dt);
c.StartDate = dt;
DateTime.TryParse("January 01, 2015", out dt);
c.ExpirationDate = dt;
c.Subject = "This is a test certificate.";
//Create the certificate on the instance of SQL Server by supplying the certificate password argument.
c.Create("pGFD4bb925DGvbd2439587y");
}
}
Aggiunta di un certificato in PowerShell
Nell'esempio di codice viene creato un certificato semplice con una password di crittografia. A differenza di altri oggetti, il metodo Create dispone di diversi overload. L'overload utilizzato nell'esempio crea un nuovo certificato con una password di crittografia.
# Set the path context to the local, default instance of SQL Server and get a reference to AdventureWorks2022
CD \sql\localhost\default\databases
$db = get-item AdventureWorks2022
#Create a certificate
$c = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Certificate -argumentlist $db, "Test_Certificate"
$c.StartDate = "January 01, 2010"
$c.Subject = "This is a test certificate."
$c.ExpirationDate = "January 01, 2015"
#Create the certificate on the instance of SQL Server by supplying the certificate password argument.
$c.Create("pGFD4bb925DGvbd2439587y")