Konfigurieren von Always Encrypted mithilfe von PowerShell

Anwendungsbereich: JaSQL Server (alle unterstützten Versionen) JaAzure SQL-Datenbank JaVerwaltete Azure SQL-Instanz

Das PowerShell-Modul „SqlServer“ stellt Cmdlets bereit, mit denen Sie Always Encrypted sowohl in Azure SQL-Datenbank als auch in SQL Server konfigurieren können.

Sicherheitsüberlegungen bei der Verwendung von PowerShell zum Konfigurieren von Always Encrypted

Der primäre Zweck von Always Encrypted ist, sicherzustellen, dass verschlüsselte sensible Daten sicher sind, wenn das Datenbanksystem kompromittiert wird. Daher kann das Ausführen eines PowerShell-Skripts, das Schlüssel oder sensible Daten auf dem SQL Server-Computer verarbeitet, die Vorteile der Funktion einschränken oder zunichte machen. Weitere Empfehlungen zum Thema Sicherheit finden Sie unter Security Considerations for Key Management(Überlegungen zur Verwaltung von Schlüsseln).

Sie können PowerShell verwenden, um Always Encrypted-Schlüssel mit oder ohne Rollentrennung zu verwalten und so Kontrolle darüber zu erhalten, wer Zugriff auf die tatsächlichen Verschlüsselungsschlüssel im Schlüsselspeicher und auf die Datenbank erhält.

Weitere Empfehlungen finden Sie unter Security Considerations for Key Management(Überlegungen zur Verwaltung von Schlüsseln).

Voraussetzungen

Installieren Sie das SqlServer-Modul auf einem sicheren Computer, der NICHT der Hostcomputer Ihrer SQL Server-Instanz ist. Das Modul kann direkt aus dem PowerShell-Katalog installiert werden. In den Downloadanweisungen finden Sie weitere Informationen.

Importieren des SqlServer-Moduls

So laden Sie das SqlServer-Modul:

  1. Verwenden Sie das Cmdlet Set-ExecutionPolicy , um die entsprechende Skriptausführungsrichtlinie festzulegen.
  2. Verwenden Sie das Cmdlet Import-Module zum Importieren des SqlServer-Moduls.

In diesem Beispiel wird das SqlServer-Modul geladen.

# Import the SQL Server Module.  
Import-Module "SqlServer" 

Herstellen einer Verbindung mit einer Datenbank

Einige der Always Encrypted-Cmdlets arbeiten mit Daten oder Metadaten in der Datenbank und erfordern, dass Sie zuerst eine Verbindung mit der Datenbank herstellen. Es werden zwei Methoden empfohlen, um bei der Konfiguration von Always Encrypted mithilfe des SqlServer-Moduls eine Verbindung mit einer Datenbank herzustellen:

  1. Stellen Sie mithilfe des Cmdlets Get-SqlDatabase eine Verbindung her.
  2. Stellen Sie mithilfe des SQL Server PowerShell-Anbieters eine Verbindung her.

Wir hören Ihnen zu: Wenn Sie in diesem Artikel – beispielsweise in einem Schritt oder Codebeispiel – veraltete oder falsche Informationen finden, lassen Sie es uns bitte wissen. Sie können unten auf dieser Seite im Abschnitt Feedback auf die Schaltfläche Diese Seite klicken. Wir lesen jedes Feedback zu SQL in der Regel am nächsten Tag. Vielen Dank.

Verwenden von „Get-SqlDatabase“

Mit dem Cmdlet Get-SqlDatabase können Sie eine Verbindung mit einer Datenbank in SQL Server oder in Azure SQL-Datenbank herstellen. Das Cmdlet gibt ein Datenbankobjekt zurück, das Sie mithilfe des InputObject-Parameters eines Cmdlets übergeben können, das die Verbindung mit der Datenbank herstellt.

SQL Server PowerShell

# Import the SqlServer module
Import-Module "SqlServer"  

# Connect to your database
# Set the valid server name, database name and authentication keywords in the connection string
$serverName = "<Azure SQL server name>.database.windows.net"
$databaseName = "<database name>"
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Authentication = Active Directory Integrated"
$database = Get-SqlDatabase -ConnectionString $connStr

# List column master keys for the specified database.
Get-SqlColumnMasterKey -InputObject $database

Alternativ könnten Sie es auch pipegetrennt übergeben:

$database | Get-SqlColumnMasterKey

Verwenden eines SQL Server PowerShell-Anbieters

Der SQL Server PowerShell-Anbieter macht die Hierarchie von SQL Server-Objekten in Pfaden auf eine Weise verfügbar, die der Verwendung von Dateisystempfaden ähnelt. Sie können mit SQL Server PowerShell in den Pfaden navigieren, indem Sie Windows PowerShell-Aliase ähnlich den Befehlen verwenden, die Sie normalerweise zum Navigieren in den Dateisystempfaden verwenden. Nachdem Sie zur Zielinstanz und zur Datenbank navigiert sind, gelten die nachfolgenden Cmdlets für diese Datenbank, wie im folgenden Beispiel gezeigt.

Hinweis

Diese Methode zum Herstellen einer Verbindung mit einer Datenbank funktioniert nur für SQL Server (sie wird in Azure SQL-Datenbank nicht unterstützt).

# Import the SqlServer module.
Import-Module "SqlServer"
# Navigate to the database in the remote instance.
cd SQLSERVER:\SQL\servercomputer\DEFAULT\Databases\yourdatabase
# List column master keys in the above database.
Get-SqlColumnMasterKey

Alternativ können Sie einen Datenbankpfad mithilfe des allgemeinen Path -Parameters angeben, statt zur Datenbank zu navigieren.

# Import the SqlServer module.
Import-Module "SqlServer" 
# List column master keys for the specified database.
Get-SqlColumnMasterKey -Path SQLSERVER:\SQL\servercomputer\DEFAULT\Databases\yourdatabase

Always Encrypted-Tasks mithilfe von PowerShell

Referenz zu Always Encrypted-Cmdlets

Die folgenden PowerShell-Cmdlets sind für Always Encrypted verfügbar:

CMDLET BESCHREIBUNG
Add-SqlAzureAuthenticationContext Führt die Azure-Authentifizierung aus und ruft ein Authentifizierungstoken ab.
Add-SqlColumnEncryptionKeyValue Fügt einen neuen verschlüsselten Wert für ein vorhandenes Spaltenverschlüsselungsschlüssel-Objekt in der Datenbank hinzu.
Complete-SqlColumnMasterKeyRotation Schließt die Rotation eines Spaltenhauptschlüssels ab.
Get-SqlColumnEncryptionKey Gibt alle in der Datenbank definierten Spaltenverschlüsselungsschlüssel-Objekte zurück, oder gibt ein Spaltenverschlüsselungsschlüssel-Objekt mit dem angegebenen Namen zurück.
Get-SqlColumnMasterKey Gibt die in der Datenbank definierten Spaltenhauptschlüssel-Objekte zurück, oder gibt ein Spaltenhauptschlüssel-Objekt mit dem angegebenen Namen zurück.
Invoke-SqlColumnMasterKeyRotation Initiiert die Rotation eines Spaltenhauptschlüssels.
New-SqlAzureKeyVaultColumnMasterKeySettings Erstellt ein SqlColumnMasterKeySettings-Objekt, das einen asymmetrischen Schlüssel beschreibt, der in Azure Key Vault gespeichert ist.
New-SqlCngColumnMasterKeySettings Erstellt ein SqlColumnMasterKeySettings-Objekt, das einen asymmetrischen Schlüssel beschreibt, der in einem Schlüsselspeicher gespeichert ist, der die Cryptography Next Generation-API (CNG) unterstützt.
New-SqlColumnEncryptionKey Erstellt ein neues Spaltenverschlüsselungsschlüssel-Objekt in der Datenbank
New-SqlColumnEncryptionKeyEncryptedValue Erstellt den verschlüsselten Wert eines Spaltenverschlüsselungsschlüssels.
New-SqlColumnEncryptionSettings Erstellt ein SqlColumnEncryptionSettings-Objekt, das Informationen über die Verschlüsselung einer einzelnen Spalte kapselt, einschließlich Spaltenverschlüsselungsschlüssel und Verschlüsselungstyp.
New-SqlColumnMasterKey Erstellt ein Spaltenhauptschlüssel-Objekt in der Datenbank
New-SqlColumnMasterKeySettings Erstellt ein SqlColumnMasterKeySettings-Objekt für einen Spaltenhauptschlüssel mit dem angegebenen Anbieter und Schlüsselpfad
New-SqlCspColumnMasterKeySettings Erstellt ein SqlColumnMasterKeySettings-Objekt, das einen asymmetrischen Schlüssel beschreibt, das in einem Schlüsselspeicher mit einem Kryptografiedienstanbieter (cryptography service provider; CSP) gespeichert ist, der die Kryptografie-API (CAPI) unterstützt.
Remove-SqlColumnEncryptionKey Entfernt das Spaltenverschlüsselungsschlüssel-Objekt aus der Datenbank.
Remove-SqlColumnEncryptionKeyValue Entfernt einen verschlüsselten Wert für ein vorhandenes Spaltenverschlüsselungsschlüssel-Objekt aus der Datenbank.
Remove-SqlColumnMasterKey Entfernt das Spaltenhauptschlüssel-Objekt aus der Datenbank.
Set-SqlColumnEncryption Verschlüsselt, entschlüsselt oder verschlüsselt angegebene Spalten in der Datenbank erneut.

Weitere Informationen