Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Bu makalede, SqlServer PowerShell modülünü kullanarak Always Encrypted için anahtar sağlama adımları sağlanır. PowerShell'i kullanarak hem hem de rol ayrımıolmadan Always Encrypted anahtarları sağlayabilir, böylece anahtar deposundaki gerçek şifreleme anahtarlarına kimlerin erişimi olduğu ve veritabanına kimlerin erişimi olduğu üzerinde denetim sağlayabilirsiniz.
Bazı üst düzey en iyi uygulama önerileri de dahil olmak üzere Always Encrypted anahtar yönetimine genel bakış için bkz. Always Encryptediçin anahtar yönetimine genel bakış . Always Encrypted için SqlServer PowerShell modülünü kullanmaya başlama hakkında bilgi için bkz. PowerShellkullanarak Always Encrypted'ı yapılandırma .
Rol ayrımı olmadan Anahtar Temini
Bu bölümde açıklanan anahtar sağlama yöntemi, Güvenlik Yöneticileri ile DTA'lar arasındaki rol ayrımını desteklemez. Bu bölümdeki adımlardan bazıları, fiziksel anahtarlardaki işlemleri anahtar meta verilerindeki işlemlerle birleştirir. Bu nedenle, anahtarları sağlamanın bu yöntemi DevOps modelini kullanan kuruluşlar için önerilir veya veritabanı bulutta barındırılıyorsa ve birincil hedef bulut yöneticilerinin (şirket içi DTA'ların değil) hassas verilere erişmesini kısıtlamaktır. Olası saldırganlar arasında DBA'lar varsa veya DBA'ların hassas verilere erişimi olmaması gerekiyorsa, bu önerilmez.
Düz metin anahtarlarına veya anahtar deposuna (aşağıdaki tabloda yer alan Accesses düz metin anahtarları/anahtar deposu sütununda tanımlanan) erişimi içeren adımları çalıştırmadan önce, PowerShell ortamının veritabanınızı barındıran bir bilgisayardan farklı güvenli bir makinede çalıştığından emin olun. Daha fazla bilgi için bkz. anahtar yönetimi için güvenlik konuları.
| Görev | Makale | Düz metin anahtarlarına/anahtar deposuna erişir | Veritabanına erişir |
|---|---|---|---|
| Adım 1. Anahtar deposunda bir sütun ana anahtarı oluşturun. Not: SqlServer PowerShell modülü bu adımı desteklemez. Bu görevi bir komut satırından gerçekleştirmek için, seçtiğiniz anahtar deposuna özgü araçları kullanın. |
Always Encrypted için sütun ana anahtarları oluşturma ve depolama | Evet | Hayır |
| Adım 2. Bir PowerShell ortamı başlatın ve SqlServer PowerShell modülünü içeri aktarın. | PowerShell kullanarak Always Encrypted'ı Yapılandırma | Hayır | Hayır |
| Adım 3. Sunucunuza ve veritabanınıza bağlanın. | Veritabanına bağlanma | Hayır | Evet |
| Adım 4. Sütun ana anahtarınızın konumu hakkında bilgi içeren bir SqlColumnMasterKeySettings nesnesi oluşturun. SqlColumnMasterKeySettings, bellekte (PowerShell'de) bulunan bir nesnedir. Anahtar deponuza özgü komut kümesini kullanın. | New-SqlAzureKeyVaultColumnMasterKeySettings New-SqlCertificateStoreColumnMasterKeySettings New-SqlCngColumnMasterKeySettings New-SqlCspColumnMasterKeySettings |
Hayır | Hayır |
| Adım 5. Veritabanınızdaki sütun ana anahtarıyla ilgili meta verileri oluşturun. Not: Sütun ana anahtarını oluşturmak için kullanılan anahtarların veya sertifikaların geçerliliğini doğrulamayız. |
[New-SqlColumnMasterKey](/powershell/sqlserver/sqlserver/vlatest/new-sqlcolumnmasterkey) Not: Kapakların altında, cmdlet anahtar meta verileri oluşturmak için CREATE COLUMN MASTER KEY deyimini verir. |
Hayır | Evet |
| Adım 6. Sütun ana anahtarınız Azure Key Vault'ta depolanıyorsa Azure'da kimlik doğrulaması yapma. | Bağlan-AzAccount | Evet | Hayır |
| Adım 7. Sütun ana anahtarınız Azure Key Vault'ta depolanıyorsa Azure Key Vault için bir erişim belirteci alın. | Get-AzAccessToken | Hayır | Hayır |
| 8. Adım. Yeni bir sütun şifreleme anahtarı oluşturun, bunu sütun ana anahtarıyla şifreleyin ve veritabanında sütun şifreleme anahtarı meta verileri oluşturun. |
New-SqlColumnEncryptionKey Not: Dahili olarak bir sütun şifreleme anahtarı oluşturan ve şifreleyen cmdlet'in bir türevini kullanın. Not: Arka planda, cmdlet anahtar meta verileri oluşturmak için CREATE COLUMN ENCRYPTION KEY ifadesini çalıştırır. |
Evet | Evet |
Rol ayrımı olmadan Windows Sertifika Deposu (örnek)
Bu betik, Windows Sertifika Deposu'nda sertifika olan bir sütun ana anahtarı oluşturmaya, sütun şifreleme anahtarı oluşturup şifrelemeye ve SQL Server veritabanında anahtar meta verileri oluşturmaya yönelik uçtan uca bir örnektir.
# Create a column master key in Windows Certificate Store.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:CurrentUser\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage DataEncipherment -KeySpec KeyExchange
# Import the SqlServer module.
Import-Module "SqlServer"
# Connect to your database.
$serverName = "<server name>"
$databaseName = "<database name>"
# Change the authentication method in the connection string, if needed.
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True; TrustServerCertificate = True"
$database = Get-SqlDatabase -ConnectionString $connStr
# Create a SqlColumnMasterKeySettings object for your column master key.
$cmkSettings = New-SqlCertificateStoreColumnMasterKeySettings -CertificateStoreLocation "CurrentUser" -Thumbprint $cert.Thumbprint
# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings
# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database.
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName -InputObject $database -ColumnMasterKey $cmkName
Rol ayrımı olmadan Azure Key Vault (örnek)
Bu betik, Azure Key Vault'ta anahtar kasası sağlama ve yapılandırma, kasada bir sütun ana anahtarı oluşturma, sütun şifreleme anahtarı oluşturup şifreleme ve Azure SQL veritabanında anahtar meta verileri oluşturmaya yönelik uçtan uca bir örnektir.
# Create a column master key in Azure Key Vault.
Import-Module Az
Connect-AzAccount
$SubscriptionId = "<Azure SubscriptionId>"
$resourceGroup = "<resource group name>"
$azureLocation = "<datacenter location>"
$akvName = "<key vault name>"
$akvKeyName = "<key name>"
$azureCtx = Set-AzConteXt -SubscriptionId $SubscriptionId # Sets the context for the below cmdlets to the specified subscription.
New-AzResourceGroup -Name $resourceGroup -Location $azureLocation # Creates a new resource group - skip, if your desired group already exists.
New-AzKeyVault -VaultName $akvName -ResourceGroupName $resourceGroup -Location $azureLocation # Creates a new key vault - skip if your vault already exists.
Set-AzKeyVaultAccessPolicy -VaultName $akvName -ResourceGroupName $resourceGroup -PermissionsToKeys get, create, delete, list, wrapKey,unwrapKey, sign, verify -UserPrincipalName $azureCtx.Account
$akvKey = Add-AzKeyVaultKey -VaultName $akvName -Name $akvKeyName -Destination "Software"
# Connect to your database (Azure SQL database).
Import-Module "SqlServer"
$serverName = "<Azure SQL server name>.database.windows.net"
$databaseName = "<database name>"
# Change the authentication method in the connection string, if needed.
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Authentication = Active Directory Integrated; TrustServerCertificate = True"
$database = Get-SqlDatabase -ConnectionString $connStr
# Create a SqlColumnMasterKeySettings object for your column master key.
$cmkSettings = New-SqlAzureKeyVaultColumnMasterKeySettings -KeyURL $akvKey.Key.Kid
# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings -KeyVaultAccessToken $keyVaultAccessToken
# Obtain an access token for key vaults.
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl https://vault.azure.net).Token
# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database.
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName -InputObject $database -ColumnMasterKey $cmkName -KeyVaultAccessToken $keyVaultAccessToken
Rol ayrımı olmadan CNG/KSP (örnek)
Aşağıdaki betik, Şifreleme Yeni Nesil API'si (CNG) uygulayan bir anahtar deposunda sütun ana anahtarı oluşturmaya, sütun şifreleme anahtarı oluşturup şifrelemeye ve SQL Server veritabanında anahtar meta verileri oluşturmaya yönelik uçtan uca bir örnektir.
Örnek, Microsoft Yazılım Anahtarı Depolama Sağlayıcısı'nı kullanan anahtar depoyu kullanır. Örneği, donanım güvenlik modülü gibi farklı bir depolama birimi kullanacak şekilde değiştirmeyi seçebilirsiniz. Bunun için cihazınız için CNG'yi uygulayan anahtar deposu sağlayıcısının (KSP) makinenize yüklendiğinden ve doğru şekilde yüklendiğinden emin olmanız gerekir.
Microsoft Software Key Storage Provider cihazınızın KSP adıyla değiştirmeniz gerekir.
# Create a column master key in a key store that has a CNG provider, a.k.a key store provider (KSP).
$cngProviderName = "Microsoft Software Key Storage Provider" # If you have an HSM, you can use a KSP for your HSM instead of a Microsoft KSP
$cngAlgorithmName = "RSA"
$cngKeySize = 2048 # Recommended key size for Always Encrypted column master keys
$cngKeyName = "AlwaysEncryptedKey" # Name identifying your new key in the KSP
$cngProvider = New-Object System.Security.Cryptography.CngProvider($cngProviderName)
$cngKeyParams = New-Object System.Security.Cryptography.CngKeyCreationParameters
$cngKeyParams.provider = $cngProvider
$cngKeyParams.KeyCreationOptions = [System.Security.Cryptography.CngKeyCreationOptions]::OverwriteExistingKey
$keySizeProperty = New-Object System.Security.Cryptography.CngProperty("Length", [System.BitConverter]::GetBytes($cngKeySize), [System.Security.Cryptography.CngPropertyOptions]::None);
$cngKeyParams.Parameters.Add($keySizeProperty)
$cngAlgorithm = New-Object System.Security.Cryptography.CngAlgorithm($cngAlgorithmName)
$cngKey = [System.Security.Cryptography.CngKey]::Create($cngAlgorithm, $cngKeyName, $cngKeyParams)
# Import the SqlServer module.
Import-Module "SqlServer"
# Connect to your database.
$serverName = "<server name>"
$databaseName = "<database name>"
# Change the authentication method in the connection string, if needed.
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True; TrustServerCertificate = True"
$database = Get-SqlDatabase -ConnectionString $connStr
# Create a SqlColumnMasterKeySettings object for your column master key.
$cmkSettings = New-SqlCngColumnMasterKeySettings -CngProviderName $cngProviderName -KeyName $cngKeyName
# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings
# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database.
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName -InputObject $database -ColumnMasterKey $cmkName
Rol ayrımı ile anahtar sağlama
Bu bölümde, güvenlik yöneticilerinin veritabanına erişimi olmayan ve veritabanı yöneticilerinin anahtar deposuna veya düz metin anahtarlarına erişimi olmayan şifrelemeyi yapılandırma adımları sağlanır.
Güvenlik yöneticisi
Düz metin anahtarlarına veya anahtar deposuna erişim içeren adımları çalıştırmadan önce (aşağıdaki tabloda yer alan Accesses düz metin anahtarları/anahtar deposu sütununda tanımlanır) şunlardan emin olun:
- PowerShell ortamı, veritabanınızı barındıran bir bilgisayardan farklı olan güvenli bir makinede çalışır.
- Kuruluşunuzdaki DTA'ların makineye erişimi yoktur (bu, rol ayrımının amacını yenebilir).
Daha fazla bilgi için bkz. anahtar yönetimi için güvenlik konuları.
| Görev | Makale | Düz metin anahtarlarına/anahtar deposuna erişir | Veritabanına erişir |
|---|---|---|---|
| Adım 1. Anahtar deposunda bir sütun ana anahtarı oluşturun. Not: SqlServer modülü bu adımı desteklemez. Bu görevi bir komut satırından gerçekleştirmek için, anahtar deponuzun türüne özgü araçları kullanmanız gerekir. |
Always Encrypted için sütun ana anahtarları oluşturma ve depolama | Evet | Hayır |
| Adım 2. Bir PowerShell oturumu başlatın ve SqlServer modülünü içeri aktarın. | SqlServer modülünü içeri aktarma | Hayır | Hayır |
| Adım 3. Sütun ana anahtarınızın konumu hakkında bilgi içeren bir SqlColumnMasterKeySettings nesnesi oluşturun. SqlColumnMasterKeySettings, bellekte (PowerShell'de) bulunan bir nesnedir. Anahtar deponuza özgü komut kümesini kullanın. | New-SqlAzureKeyVaultColumnMasterKeySettings New-SqlCertificateStoreColumnMasterKeySettings New-SqlCngColumnMasterKeySettings New-SqlCspColumnMasterKeySettings |
Hayır | Hayır |
| Adım 4. Sütun ana anahtarınız Azure Key Vault'ta depolanıyorsa Azure'da kimlik doğrulaması yapma. | Bağlan-AzAccount | Evet | Hayır |
| Adım 5. Sütun ana anahtarınız Azure Key Vault'ta depolanıyorsa Azure Key Vault için bir erişim belirteci alın. | Get-AzAccessToken | Hayır | Hayır |
| Adım 6. Bir sütun şifreleme anahtarı oluşturun, sütun şifreleme anahtarının şifrelenmiş değerini oluşturmak için bunu sütun ana anahtarıyla şifreleyin. | New-SqlColumnEncryptionKeyEncryptedValue | Evet | Hayır |
| Adım 7. Sütun ana anahtarının konumunu (sağlayıcı adı ve sütun ana anahtarının anahtar yolu) ve DBA'ya sütun şifreleme anahtarının şifrelenmiş değerini sağlayın. | Makalenin sonundaki örneklere bakın. | Hayır | Hayır |
Veritabanı Yöneticisi (DBA)
DTA'lar, veritabanında Always Encrypted anahtar meta verilerini oluşturmak ve yönetmek için Güvenlik Yöneticisi'nden (yukarıdaki 7. adım) aldıkları bilgileri kullanır.
| Görev | Makale | Düz metin anahtarlarına erişir | Veritabanına erişir |
|---|---|---|---|
| Adım 1. Güvenlik Yöneticinizden sütun ana anahtarının konumunu ve sütun şifreleme anahtarının şifrelenmiş değerini alın. | Makalenin sonundaki örneklere bakın. | Hayır | Hayır |
| Adım 2. Bir PowerShell ortamı başlatın ve SqlServer modülünü içeri aktarın. | PowerShell kullanarak Always Encrypted'ı Yapılandırma | Hayır | Hayır |
| Adım 3. Sunucunuza ve bir veritabanına bağlanın. | Veritabanına bağlanma | Hayır | Evet |
| Adım 4. Sütun ana anahtarınızın konumu hakkında bilgi içeren bir SqlColumnMasterKeySettings nesnesi oluşturun. SqlColumnMasterKeySettings, bellekte bulunan bir nesnedir. | Yeni-SqlSütunAnahtarAyarlaması | Hayır | Hayır |
| Adım 5. Veritabanınızdaki sütun ana anahtarıyla ilgili meta verileri oluşturun. Not: Sütun ana anahtarını oluşturmak için kullanılan anahtarların veya sertifikaların geçerliliğini doğrulamayız. |
New-SqlColumnMasterKey Not: Cmdlet, arka planda sütun anahtar meta verilerini oluşturmak için CREATE COLUMN MASTER KEY (Transact-SQL) deyimini çalıştırır. |
Hayır | Evet |
| Adım 6. Veritabanında sütun şifreleme anahtarı meta verilerini oluşturun. | New-SqlColumnEncryptionKey Not: DTA'lar, cmdlet'in yalnızca sütun şifreleme anahtarı meta verilerini oluşturan bir varyasyonunu kullanır. Cmdlet, kapakların ardında sütun şifreleme anahtarı meta verilerini oluşturmak için CREATE COLUMN ENCRYPTION KEY (Transact-SQL) ifadesini kullanır. |
Hayır | Evet |
Rol ayrımı ile Windows Sertifika Deposu (örnek)
Güvenlik yöneticisi
# Create a column master key in Windows Certificate Store.
$storeLocation = "CurrentUser"
$certPath = "Cert:" + $storeLocation + "\My"
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation $certPath -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage DataEncipherment -KeySpec KeyExchange
# Import the SqlServer module
Import-Module "SqlServer"
# Create a SqlColumnMasterKeySettings object for your column master key.
$cmkSettings = New-SqlCertificateStoreColumnMasterKeySettings -CertificateStoreLocation "CurrentUser" -Thumbprint $cert.Thumbprint
# Generate a column encryption key, encrypt it with the column master key to produce an encrypted value of the column encryption key.
$encryptedValue = New-SqlColumnEncryptionKeyEncryptedValue -TargetColumnMasterKeySettings $cmkSettings
# Share the location of the column master key and an encrypted value of the column encryption key with a DBA, via a CSV file on a share drive
$keyDataFile = "Z:\keydata.txt"
"KeyStoreProviderName, KeyPath, EncryptedValue" > $keyDataFile
$cmkSettings.KeyStoreProviderName + ", " + $cmkSettings.KeyPath + ", " + $encryptedValue >> $keyDataFile
# Read the key data back to verify
$keyData = Import-Csv $keyDataFile
$keyData.KeyStoreProviderName
$keyData.KeyPath
$keyData.EncryptedValue
Veritabanı Yöneticisi (DBA)
# Obtain the location of the column master key and the encrypted value of the column encryption key from your Security Administrator, via a CSV file on a share drive.
$keyDataFile = "Z:\keydata.txt"
$keyData = Import-Csv $keyDataFile
# Import the SqlServer module
Import-Module "SqlServer"
# Connect to your database.
$serverName = "<server name>"
$databaseName = "<database name>"
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True; TrustServerCertificate = True"
$database = Get-SqlDatabase -ConnectionString $connStr
# Create a SqlColumnMasterKeySettings object for your column master key.
$cmkSettings = New-SqlColumnMasterKeySettings -KeyStoreProviderName $keyData.KeyStoreProviderName -KeyPath $keyData.KeyPath
# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings
# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database.
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName -InputObject $database -ColumnMasterKey $cmkName -EncryptedValue $keyData.EncryptedValue
İlgili içerik
- PowerShell ile Always Encrypted kullanarak sütun şifrelemeyi yapılandırma
- PowerShell kullanarak Always Encrypted anahtarlarını döndürme
- Always Encrypted kullanarak uygulama geliştirme
- Her Zaman Şifreli
- Always Encrypted için anahtar yönetimine genel bakış
- Always Encrypted için sütun ana anahtarları oluşturma ve depolama
- PowerShell kullanarak Always Encrypted'ı Yapılandırma
- SQL Server Management Studio kullanarak Always Encrypted anahtarlarını sağlama
- CREATE COLUMN MASTER KEY (Transact-SQL)
- DROP COLUMN MASTER KEY (Transact-SQL)
- SÜTUN ŞİFRELEME ANAHTARI OLUŞTUR (Transact-SQL)
- ALTER COLUMN ENCRYPTION KEY (Transact-SQL)
- DROP COLUMN ENCRYPTION KEY (Transact-SQL)
- sys.column_master_keys (Transact-SQL)
- sys.column_encryption_keys (Transact-SQL)