如何使用AlwaysEncrypted建立AzureSQL数据库并填充数据



目前我正在使用Azure Cloud。我想建立一个AzureSQL数据库,并使用AlwaysEncrypted来确保数据"始终加密";-(。此外,我想设置AzureFunctions,它能够连接到数据库,并在中写入记录

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

  1. 直接在SSMS中设置表,在表中填充数据,创建密钥并使用向导对其进行加密。这完全正常,只有在连接到数据库时设置了"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
)

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

感谢您的帮助。

最佳P

如果您想在python应用程序中连接启用always encrypt的Azure SQL server和Azure密钥库,我们可以使用ODBC驱动程序来实现它。

关于如何实现它,我们需要将ColumnEncryption=Enabled添加到连接字符串中,以告诉odbc应用程序始终启用加密。此外,由于我们使用Azure密钥库存储,我们还需要添加KeyStoreAuthenticationKeyStorePrincipalIdKeyStoreSecret,以使ODBC应用程序连接Azure密钥库,获得加密密钥。有关更多详细信息,请参阅此处和此处的

例如

  1. 创建服务主体以连接Azure密钥保管库
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>
  1. 代码
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()

相关内容

  • 没有找到相关文章

最新更新