Использование шифрования
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics
В SMO главный ключ службы представлен объектом ServiceMasterKey. На него ссылается свойство ServiceMasterKey объекта Server. Его можно сформировать заново с помощью метода Regenerate.
Главный ключ базы данных представлен объектом MasterKey. Свойство IsEncryptedByServer указывает, шифруется ли главный ключ базы данных с помощью главного ключа службы. Зашифрованная копия в базе данных master обновляется автоматически при любом изменении главного ключа базы данных.
С помощью метода DropServiceKeyEncryption можно отключить шифрование с использованием ключа службы и зашифровать главный ключ базы данных с использованием пароля. В таком случае потребуется явно открыть главный ключ базы данных перед доступом к хранящимся в нем закрытым ключам.
При присоединении базы данных к экземпляру SQL Server необходимо указать пароль для главного ключа базы данных или выполнить AddServiceKeyEncryption метод, чтобы сделать незашифрованную копию главного ключа базы данных доступным для шифрования с помощью главного ключа службы. Этот шаг рекомендуется, поскольку он позволяет избежать необходимости явно открывать главный ключ базы данных.
Метод Regenerate используется для повторного создания главного ключа базы данных. При повторном создании главного ключа базы данных все ключи, которые были зашифрованы главным ключом базы данных, расшифровываются, а затем шифруются с использованием нового главного ключа базы данных. Метод DropServiceKeyEncryption используется для удаления шифрования главного ключа базы данных с помощью главного ключа службы. Сущность AddServiceKeyEncryption используется для шифрования копии главного ключа с помощью главного ключа службы и сохраняется как в текущей базе данных, так и в базе данных master.
В SMO сертификаты представлены объектом Certificate. У объекта Certificate есть свойства, указывающие открытый ключ, имя субъекта, срок действия и сведения об издателе. Разрешение на доступ к сертификату управляется с помощью методов Grant, Revoke и Deny .
Пример
В следующих примерах кода для создания приложения необходимо выбрать среду программирования, шаблон программирования и язык программирования. Дополнительные сведения см. в статье "Создание проекта SMO Visual C# в Visual Studio .NET".
Добавление сертификата на языке Visual C#
В этом примере кода создается простой сертификат с паролем для шифрования. В отличие от других объектов у метода Create есть несколько перегруженных методов. Перегруженный метод, используемый в этом примере, создает новый сертификат с паролем для шифрования.
{
//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");
}
}
Добавление сертификата в PowerShell
В этом примере кода создается простой сертификат с паролем для шифрования. В отличие от других объектов у метода Create есть несколько перегруженных методов. Перегруженный метод, используемый в этом примере, создает новый сертификат с паролем для шифрования.
# 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")