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.
In diesem Artikel wird erläutert, wie Sie SQL Server Always Encrypted with Django-Anwendungen über das mssql-django Back-End verwenden. Always Encrypted bietet Verschlüsselung auf Spaltenebene, die vertrauliche Daten im Ruhezustand und während der Übertragung schützt.
Voraussetzungen
- Microsoft ODBC-Treiber 17 oder 18 für SQL Server
- SQL Server 2016 oder höher oder Azure SQL-Datenbank
- Auf der SQL Server Seite konfigurierte Spaltenverschlüsselung (Spaltenmasterschlüssel und Spaltenverschlüsselungsschlüssel)
Funktionsweise
Always Encrypted wird von der ODBC-Treiberebene behandelt, nicht von Django selbst. Wenn Sie den ColumnEncryption ODBC-Parameter aktivieren, verschlüsselt und entschlüsselt der Treiber automatisch Daten, während er zwischen Ihrer Anwendung und SQL Server übergeben wird. Django-Modelle und -Abfragen funktionieren auf die gleiche Weise, ob Spalten verschlüsselt sind oder nicht.
Windows-Zertifikatspeicher
Wenn Spaltenmasterschlüssel im Windows-Zertifikatspeicher gespeichert werden, aktivieren Sie Always Encrypted durch Hinzufügen von ColumnEncryption=Enabled zu extra_params:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": "ColumnEncryption=Enabled",
},
},
}
Dieser Ansatz funktioniert nur für Windows.
Azure Key Vault mit Client-ID und Geheimnis
Wenn Spaltenmasterschlüssel in Azure Key Vault gespeichert werden, geben Sie die Anwendungsanmeldeinformationen in extra_params:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": (
"ColumnEncryption=Enabled;"
"KeyStoreAuthentication=KeyVaultClientSecret;"
"KeyStorePrincipalId=<application-client-id>;"
"KeyStoreSecret=<client-secret>"
),
},
},
}
Ersetzen Sie <application-client-id> und <client-secret> durch die Anwendungs-ID (Client-ID) und den Wert des geheimen Clientschlüssels der App-Registrierung.
Important
Codieren Sie keine geheimen Schlüssel in settings.py. Verwenden Sie Umgebungsvariablen oder einen Secret-Manager, um Zugangsdaten zur Laufzeit bereitzustellen.
Azure Key Vault mit verwalteter Identität
Verwenden Sie bei der Ausführung auf Azure (z. B. Azure Virtual Machines oder Azure App Service) verwaltete Identität, um auf Azure Key Vault zuzugreifen.
Vom System zugewiesene verwaltete Identität
Über den KeyStoreAuthentication Parameter hinaus ist keine zusätzliche Konfiguration erforderlich:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"HOST": "<your-server>.database.windows.net",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": (
"ColumnEncryption=Enabled;"
"KeyStoreAuthentication=KeyVaultManagedIdentity"
),
},
},
}
Vom Benutzer zugewiesene verwaltete Identität
Einschließen der Client-ID der verwalteten Identität (auch als Anwendungs-ID bezeichnet):
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"HOST": "<your-server>.database.windows.net",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": (
"ColumnEncryption=Enabled;"
"KeyStoreAuthentication=KeyVaultManagedIdentity;"
"KeyStorePrincipalId=<managed-identity-client-id>"
),
},
},
}
Berechtigungen für verwaltete Identitäten erteilen
Gewähren Sie der verwalteten Identität Zugriff auf Ihre Azure SQL-Datenbank:
CREATE USER [<identity-name>] FOR EXTERNAL PROVIDER; ALTER ROLE db_datareader ADD MEMBER [<identity-name>]; ALTER ROLE db_datawriter ADD MEMBER [<identity-name>]; GRANT VIEW ANY COLUMN MASTER KEY DEFINITION TO [<identity-name>]; GRANT VIEW ANY COLUMN ENCRYPTION KEY DEFINITION TO [<identity-name>];Gewähren Sie der verwalteten Identität Zugriff auf den Azure Key Vault, in dem der Spaltenmasterschlüssel gespeichert ist, mit den in der Dokumentation zu Always Encrypted Azure Key Vault aufgeführten Berechtigungen.
Lassen Sie Django verschlüsselte Tabellen verwalten
Wenn Sie Always Encrypted with Django verwenden, konfigurieren Sie zuerst Verschlüsselungsobjekte für SQL Server, und führen Sie dann Migrationen aus.
Empfohlene Reihenfolge:
- Erstellen Sie den Spaltenmasterschlüssel (CMK) und den Spaltenverschlüsselungsschlüssel (Column Encryption Key, CEK) auf SQL Server oder Azure SQL.
- Konfigurieren Sie
ColumnEncryption=Enabledin den Django-Verbindungseinstellungen. - Führen Sie Django-Migrationen aus.
- Verschlüsseln sie Zielspalten mit SQL Server Management Studio oder T-SQL.
Ausführen von Migrationen:
python manage.py migrate
mssql-django erstellt oder verwaltet keine Always Encrypted-Schlüsselmetadaten. Schlüsselerstellung und Spaltenverschlüsselungsrichtlinie bleiben Aufgaben der SQL Server-Administration.
Nicht unterstützte Authentifizierungsmethoden
Benutzername/Kennwort und Azure Key Vault Interaktive Authentifizierung werden für den Zugriff auf Always Encrypted-Schlüsselspeicher nicht unterstützt.