Konfigurieren von Always Encrypted mithilfe von PowerShell
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance
Das PowerShell-Modul für SQL Server namens „SqlServer“ stellt Cmdlets bereit, mit denen Sie Always Encrypted sowohl in Azure SQL-Datenbank oder 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 PowerShell-Modulversion 22.0.50 oder höher 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:
- Verwenden Sie das Cmdlet Set-ExecutionPolicy , um die entsprechende Skriptausführungsrichtlinie festzulegen.
- 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" -MinimumVersion 22.0.50
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:
- Stellen Sie mithilfe des Cmdlets Get-SqlDatabase eine Verbindung her.
- Stellen Sie mithilfe des SQL Server PowerShell-Anbieters eine Verbindung her.
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" -MinimumVersion 22.0.50
# 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" -MinimumVersion 22.0.50
# 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" -MinimumVersion 22.0.50
# List column master keys for the specified database.
Get-SqlColumnMasterKey -Path SQLSERVER:\SQL\servercomputer\DEFAULT\Databases\yourdatabase
Always Encrypted-Tasks mithilfe von PowerShell
- Bereitstellen von Always Encrypted-Schlüsseln mithilfe von PowerShell
- Rotieren von Always Encrypted-Schlüsseln mithilfe von PowerShell
- Verschlüsseln, erneutes Verschlüsseln oder Entschlüsseln von Spalten mit Always Encrypted 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. |