Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
Das SqlServer PowerShell-Modul stellt Cmdlets zum Konfigurieren von Always Encrypted sowohl in Azure SQL-Datenbank als auch in SQL Server bereit.
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 sicherheitsbezogene Empfehlungen finden Sie unter "Sicherheitsüberlegungen für die Schlüsselverwaltung".
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 Sicherheitsüberlegungen für die Schlüsselverwaltung.
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 der PowerShell Gallery installiert werden. In den Downloadanweisungen finden Sie weitere Informationen.
Hinweis
Microsoft empfiehlt die Verwendung von PowerShell 7 oder höher beim Ausführen von Always Encrypted PowerShell-Skripts. PowerShell 7 bietet eine verbesserte plattformübergreifende Unterstützung, bessere Leistung und die neueste Kompatibilität mit dem SqlServer-Modul (v22+), die für viele Always Encrypted-Szenarien erforderlich ist.
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.
Verwenden von 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=tcp:$serverName,1433;Database=$databaseName;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Authentication=Active Directory Interactive"
try {
$database = Get-SqlDatabase -ConnectionString $connStr -Encrypt Mandatory -ErrorAction Stop
}
catch {
Write-Error "Failed to connect. Verify server name, database name, Azure SQL firewall access, and Microsoft Entra permissions."
throw
}
# List column master keys for the specified database.
Get-SqlColumnMasterKey -InputObject $database
Alternativ können Sie Pipes verwenden:
$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 der 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
Immer verschlüsselte Aufgaben mit 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 | Startet die Rotation eines Spalten-Masterschlü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 zur Verschlüsselung einer einzelnen Spalte kapselt, einschließlich CEK 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. |