Utilizzo della crittografia
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 allegato a un'istanza di SQL Server, è necessario fornire la password per la chiave master del database oppure eseguire il metodo AddServiceKeyEncryption per eseguire una copia non crittografata della chiave master del database disponibile 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 l'esempio di codice seguente, è necessario selezionare l'ambiente, il modello e il linguaggio di programmazione per la creazione dell'applicazione. Per ulteriori informazioni, vedere Creare un progetto SMO per Visual Basic in Visual Studio .NET e Creare un progetto SMO per Visual C# in Visual Studio .NET.
Aggiunta di un certificato in Visual Basic
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.
Dim srv As Server
srv = New Server
'Reference the AdventureWorks2012 database.
Dim db As Database
db = srv.Databases("AdventureWorks2012")
'Define a Certificate object variable by supplying the parent database and name in the constructor.
Dim c As Certificate
c = New Certificate(db, "Test_Certificate")
'Set the start date, expiry date, and description.
c.StartDate = DateValue("January 01, 2007")
c.Subject = "This is a test certificate."
c.ExpirationDate = DateValue("January 01, 2008")
'Create the certificate on the instance of SQL Server by supplying the certificate password argument.
c.Create("pGFD4bb925DGvbd2439587y")
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 AdventureWorks2012 database.
Database db = srv.Databases["AdventureWorks2012"];
//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 AdventureWorks2012
CD \sql\localhost\default\databases
$db = get-item AdventureWorks2012
#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")