Python 如何使用AlwaysEncrypted设置AzureSQL数据库并用数据填充?
目前我正在使用Azure云。我想建立一个AzureSQL数据库,并使用AlwaysEncrypted确保数据“始终加密”;-)。此外,我想设置AzureFunctions,它能够连接到数据库并在中写入记录 我已经建立了AzureSQL数据库,但我不知道如何使用它。我开始了两次尝试:Python 如何使用AlwaysEncrypted设置AzureSQL数据库并用数据填充?,python,azure,azure-sql-database,always-encrypted,Python,Azure,Azure Sql Database,Always Encrypted,目前我正在使用Azure云。我想建立一个AzureSQL数据库,并使用AlwaysEncrypted确保数据“始终加密”;-)。此外,我想设置AzureFunctions,它能够连接到数据库并在中写入记录 我已经建立了AzureSQL数据库,但我不知道如何使用它。我开始了两次尝试: 直接在SSMS中设置表,在表中填充数据,创建密钥并使用向导对其进行加密。这工作完全正常,只有在连接到数据库时设置“AlwaysEncrypted”复选框,我才能看到普通数据 我的第二次尝试是在查询中直接包含“始终加密
创建列主密钥CMK\u测试\u 1
与(
密钥存储\u提供程序\u名称='AZURE\u密钥库',
密钥路径=“”
)
创建列加密密钥CEK_test_1
有价值
(
列\u主\u键=CMK\u测试\u 1,
算法='RSA_OAEP',
加密的_值=
)
创建表dbo.AlwaysEncryptedTest
(
ID int标识(1,1)主键
,FirstName varchar(25)校对拉丁文1_General_BIN2,用(
加密类型=随机化,
算法='AEAD_AES_256_CBC_HMAC_SHA_256',
列\u加密\u密钥=CEK\u测试\u 1)不为空
,LastName varchar(25)校对拉丁文1_General_BIN2,用(
加密类型=随机化,
算法='AEAD_AES_256_CBC_HMAC_SHA_256',
列\u加密\u密钥=CEK\u测试\u 1)不为空
,City varchar(25)校对拉丁文1_General_BIN2,用(
加密类型=随机化,
算法='AEAD_AES_256_CBC_HMAC_SHA_256',
列\u加密\u密钥=CEK\u测试\u 1)不为空
,StreetName varchar(25)校对拉丁文1_General_BIN2,用(
加密类型=随机化,
算法='AEAD_AES_256_CBC_HMAC_SHA_256',
列\u加密\u密钥=CEK\u测试\u 1)不为空
)
我知道我必须使用应用程序将记录放入数据库,但我找不到教程或其他帮助我这样做的东西。我在微软的网站上找到了一些解释,但这并没有帮助我完成这项工作。在最好的情况下,我会用python编写连接
感谢您的帮助
最好的
P
如果您想连接Azure SQL server,它在python应用程序中使用Azure密钥库启用<代码>始终加密,我们可以使用ODBC驱动程序来实现它
关于如何实现它,我们需要在连接字符串中添加columnecryption=Enabled
,以告知odbc应用程序始终加密已启用。此外,由于我们使用Azure密钥库存储,我们还需要添加KeyStoreAuthentication
keystorencipalid
和keystorecret
以使ODBC应用程序连接Azure密钥库,获取加密密钥。
有关更多详细信息,请参阅和
比如说
az登录
az ad sp为rbac创建--跳过分配--sdk身份验证
az keyvault集策略--name$vaultName--密钥权限获取、列表、签名、解除密钥、验证、wrapKey--资源组$resourceGroupName--spn
server='.database.windows.net'
数据库=“”
用户名=“”
密码=“”
驱动程序=“{SQL Server的ODBC驱动程序17}”
KeyStoreAuthentication='KeyVaultClientSecret'
keystorencipalid=“”
KeyStoreCret=“”
conn_str=f'DRIVER={DRIVER};服务器={SERVER};端口=1443;数据库={DATABASE};UID={username};PWD={password};ColumnEncryption=已启用;KeyStoreAuthentication={KeyStoreAuthentication};KeyStorePrincipalId={KeyStorePrincipalId};KeyStoreCret={KeyStoreCret}'
使用pyodbc.connect(conn_str)作为连接:
使用conn.cursor()作为光标:
cursor.execute(“从[dbo].[Patients]]中选择*”)
row=cursor.fetchone()
而行:
打印(行)
row=cursor.fetchone()
t非常感谢您的帮助。我一有时间就会试试这个:——)@Pet你还有其他问题吗?
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
)
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()