如何使用 Always Encrypted 设置 Azure SQL 数据库并用数据填充它?
How to set up AzureSQL Database with AlwaysEncrypted and fill it with data?
目前我正在使用 Azure Cloud。我想设置一个 AzureSQL 数据库并使用 AlwaysEncrypted 来确保数据是 'always encrypted' ;-)。此外,我想设置能够连接到数据库并写入记录的 AzureFunctions。
我已经设置了 AzureSQL 数据库,但我不知道如何使用它。我开始了两次尝试:
- 直接在SSMS中设置table,在table中填写数据,创建密钥并使用向导加密。这工作得很好,只有在连接到数据库时设置 'AlwaysEncrypted' 复选框,我才能看到纯数据。
- 我的第二次尝试是在查询中直接包含“始终加密”。我尝试了以下方法:
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.
中写入连接
感谢任何帮助。
最佳
P
如果你想在python应用程序中连接启用always encrypt
的Azure SQL服务器和Azure key vault,我们可以使用ODBC驱动程序来实现它。
关于如何实现,我们需要在连接字符串中添加ColumnEncryption=Enabled
来告诉odbc应用程序始终加密已经启用。此外,由于我们使用Azure key vault store,我们还需要添加KeyStoreAuthentication
KeyStorePrincipalId
和 KeyStoreSecret
让ODBC应用程序连接Azure key vault,获取加密密钥。
详情请参考here and here
例如
- 创建服务主体以连接 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>
- 代码
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()
目前我正在使用 Azure Cloud。我想设置一个 AzureSQL 数据库并使用 AlwaysEncrypted 来确保数据是 'always encrypted' ;-)。此外,我想设置能够连接到数据库并写入记录的 AzureFunctions。
我已经设置了 AzureSQL 数据库,但我不知道如何使用它。我开始了两次尝试:
- 直接在SSMS中设置table,在table中填写数据,创建密钥并使用向导加密。这工作得很好,只有在连接到数据库时设置 'AlwaysEncrypted' 复选框,我才能看到纯数据。
- 我的第二次尝试是在查询中直接包含“始终加密”。我尝试了以下方法:
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.
中写入连接感谢任何帮助。
最佳 P
如果你想在python应用程序中连接启用always encrypt
的Azure SQL服务器和Azure key vault,我们可以使用ODBC驱动程序来实现它。
关于如何实现,我们需要在连接字符串中添加ColumnEncryption=Enabled
来告诉odbc应用程序始终加密已经启用。此外,由于我们使用Azure key vault store,我们还需要添加KeyStoreAuthentication
KeyStorePrincipalId
和 KeyStoreSecret
让ODBC应用程序连接Azure key vault,获取加密密钥。
详情请参考here and here
例如
- 创建服务主体以连接 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>
- 代码
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()