Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt uitgelegd hoe u SQL Server Always Encrypted gebruikt met Django-toepassingen via de mssql-django back-end. Always Encrypted biedt versleuteling op kolomniveau waarmee gevoelige gegevens in rust en in transit worden beschermd.
Prerequisites
- Microsoft ODBC-stuurprogramma 17 of 18 voor SQL Server
- SQL Server 2016 of hoger of Azure SQL Database
- Kolomversleuteling geconfigureerd aan de SQL Server zijde (kolomhoofdsleutel en kolomversleutelingssleutel)
Hoe werkt het?
Always Encrypted wordt verwerkt door de ODBC-stuurprogrammalaag, niet door Django zelf. Wanneer u de ColumnEncryption ODBC-parameter inschakelt, worden gegevens automatisch versleuteld en ontsleuteld wanneer deze worden doorgegeven tussen uw toepassing en SQL Server. Django-modellen en -query's werken op dezelfde manier als kolommen worden versleuteld of niet.
Windows-certificaatarchief
Wanneer kolomhoofdsleutels worden opgeslagen in het Windows certificaatarchief, schakelt u Always Encrypted in door toe te voegen ColumnEncryption=Enabled aanextra_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",
},
},
}
Deze aanpak werkt alleen op Windows.
Azure Key Vault met client-id en geheim
Wanneer kolomhoofdsleutels worden opgeslagen in Azure Key Vault, geeft u de toepassingsreferenties op inextra_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>"
),
},
},
}
Vervang <application-client-id> en <client-secret> door de Toepassings-id (client) van de app-registratie en de clientgeheime waarde.
Important
Codeer geheimen niet in settings.py. Gebruik omgevingsvariabelen of een geheimbeheerder om referenties op te geven tijdens runtime.
Azure Key Vault met beheerde identiteit
Wanneer u toepassingen uitvoert op Azure (bijvoorbeeld Azure Virtuele Machines of Azure App Service), gebruikt u een beheerde identiteit om toegang te krijgen tot Azure Key Vault.
Door het systeem toegewezen beheerde identiteit
Er is geen extra configuratie nodig buiten de KeyStoreAuthentication parameter:
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"
),
},
},
}
Door de gebruiker toegewezen beheerde identiteit
Neem de client-id van de beheerde identiteit op (ook wel toepassings-id genoemd):
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>"
),
},
},
}
Machtigingen voor beheerde identiteit verlenen
Geef de beheerde identiteit toegang tot uw Azure SQL-database:
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>];Verleen de beheerde identiteit toegang tot de Azure Key Vault waarin de hoofdsleutel van de kolom wordt opgeslagen, met de machtigingen die worden genoemd in de documentatie van Always Encrypted Azure Key Vault.
Laat Django versleutelde tabellen beheren
Wanneer u Always Encrypted met Django gebruikt, configureert u eerst versleutelingsobjecten op SQL Server en voert u vervolgens migraties uit.
Aanbevolen volgorde:
- Maak de kolomhoofdsleutel (CMK) en kolomversleutelingssleutel (CEK) op SQL Server of Azure SQL.
- Configureer
ColumnEncryption=Enabledin django-verbindingsinstellingen. - Voer Django-migraties uit.
- Doelkolommen versleutelen met SQL Server Management Studio of T-SQL.
Migraties uitvoeren:
python manage.py migrate
mssql-django maakt of beheert geen metagegevens van Always Encrypted-sleutels. Sleutel maken en kolomversleutelingsbeleid blijven SQL Server beheertaken.
Niet-ondersteunde verificatiemethoden
Gebruikersnaam/wachtwoord en Azure Key Vault Interactieve verificatie worden niet ondersteund voor toegang tot Always Encrypted-sleutelarchief.