gpt4 book ai didi

python - 如何设置始终加密的 Azure SQL 数据库并用数据填充它?

转载 作者:行者123 更新时间:2023-12-03 05:34:16 24 4
gpt4 key购买 nike

目前我正在使用 Azure 云。我想设置一个 AzureSQL 数据库并使用 AlwaysEncrypted 来确保数据“始终加密”;-)。此外,我想设置 AzureFunctions,它能够连接到数据库以及写入记录。

我已经设置了 AzureSQL 数据库,但我不知道如何使用它。我开始了两次尝试:

  1. 直接在 SSMS 中设置表、在表中填充数据、创建 key 并使用向导对其进行加密。这工作得很好,只有在连接到数据库时设置“AlwaysEncrypted”复选框时,我才能看到纯数据。
  2. 我的第二次尝试是在查询中包含“始终直接加密”。我尝试了以下方法:
CREATE COLUMN MASTER KEY CMK_test_1   
WITH (
KEY_STORE_PROVIDER_NAME = 'AZURE_KEY_VAULT',
KEY_PATH = '<PATH_TO_AZURE_KEY_VAULT>'
)

CREATE COLUMN ENCRYPTION KEY CEK_test_1
WITH VALUES
(
COLUMN_MASTER_KEY = CMK_test_1,
ALGORITHM = 'RSA_OAEP',
ENCRYPTED_VALUE = <VALUE>
)

Create Table dbo.AlwaysEncryptedTest
(
ID int identity(1,1) PRIMARY KEY
, FirstName varchar(25) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (
ENCRYPTION_TYPE = RANDOMIZED,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256',
COLUMN_ENCRYPTION_KEY = CEK_test_1) not NULL
, LastName varchar(25) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (
ENCRYPTION_TYPE = RANDOMIZED,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256',
COLUMN_ENCRYPTION_KEY = CEK_test_1) not NULL
, City varchar(25) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (
ENCRYPTION_TYPE = RANDOMIZED,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256',
COLUMN_ENCRYPTION_KEY = CEK_test_1) not NULL
, StreetName varchar(25) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (
ENCRYPTION_TYPE = RANDOMIZED,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256',
COLUMN_ENCRYPTION_KEY = CEK_test_1) not NULL
)

我知道我必须使用应用程序将记录放入数据库,但我找不到教程或其他可以帮助我这样做的东西。我在 Microsoft 网站上找到了一些 C# 解释,但这并没有帮助我完成这项工作。在最好的情况下,我会用 python 编写连接。

感谢任何帮助。

最佳

最佳答案

如果您想在Python应用程序中连接支持始终加密的Azure SQL Server与Azure Key Vault,我们可以使用ODBC驱动程序来实现。

关于如何实现,我们需要在连接字符串中添加ColumnEncryption=Enabled来告诉odbc应用程序始终加密已启用。此外,由于我们使用Azure key 保管库存储,我们还需要添加KeyStoreAuthentication KeyStorePrincipalIdKeyStoreSecret以使ODBC应用程序连接Azure key 保管库,得到加密 key 。更多详情请引用herehere

例如

  1. 创建服务主体以连接 Azure key 保管库
az login
az ad sp create-for-rbac --skip-assignment --sdk-auth

az keyvault set-policy --name $vaultName --key-permissions get, list, sign, unwrapKey, verify, wrapKey --resource-group $resourceGroupName --spn <clientId-of-your-service-principal>
  • 代码
  • server = '<>.database.windows.net'
    database = ''
    username = ''
    password = ''
    driver= '{ODBC Driver 17 for SQL Server}'
    KeyStoreAuthentication='KeyVaultClientSecret'
    KeyStorePrincipalId='<clientId-of-your-service-principal>'
    KeyStoreSecret='<clientSecret-of-your-service-principal>'
    conn_str=f'DRIVER={driver};SERVER={server};PORT=1443;DATABASE={database};UID={username};PWD={password};ColumnEncryption=Enabled;KeyStoreAuthentication={KeyStoreAuthentication};KeyStorePrincipalId={KeyStorePrincipalId};KeyStoreSecret={KeyStoreSecret}'
    with pyodbc.connect(conn_str) as conn:
    with conn.cursor() as cursor:
    cursor.execute("SELECT * FROM [dbo].[Patients]")
    row = cursor.fetchone()
    while row:
    print (row)
    row = cursor.fetchone()

    关于python - 如何设置始终加密的 Azure SQL 数据库并用数据填充它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63691902/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com