如何通过Airflow DAG向含Azure Key Vault加密列的Azure SQL表插入数据及配置连接串
实现步骤
- 先完成Azure侧权限配置:给Airflow运行时使用的身份(Azure托管身份或AD服务主体)分配两类权限,一是Azure SQL数据库的读写权限,二是Azure Key Vault对应加密密钥的
加密、解密、获取密钥权限,密钥权限可在AKV的访问策略中配置。 - 安装Airflow运行环境依赖:需要安装
pyodbc、azure-identity、azure-keyvault-keys包,同时要在环境中安装对应版本的ODBC Driver for SQL Server,如果是手动处理加密逻辑可以用pymssql替代pyodbc。 - 配置Airflow敏感信息:不要在DAG代码中硬编码密码、密钥等信息,建议将SQL登录凭证、AKV服务主体凭证(如果不用托管身份)存储在Airflow Variables或内置Secret Manager中。
- 编写DAG逻辑:如果使用pyodbc的Always Encrypted自动加解密能力,只需要在连接字符串中开启对应参数,直接构造明文数据执行INSERT语句即可,pyodbc会自动调用AKV接口完成敏感列的加密;如果是手动加密,需要先通过Azure Key Vault SDK获取密钥完成敏感字段加密后,再执行插入逻辑。
- 上线前验证:测试DAG运行成功后,分别用有权限和无权限的身份查询目标表,确认加密列只有有权限的身份可以正常解密出明文,避免权限配置错误。
MsSqlHook 连接字符串配置
你可以直接在Airflow Web UI的Admin -> Connections页面创建类型为Microsoft SQL Server的连接,连接字符串根据你使用的驱动分为两类:
1. pyodbc驱动(推荐,支持Always Encrypted自动加解密)
用户名密码登录场景
mssql+pyodbc://<sql用户名>:<sql密码>@<Azure SQL服务器地址>:1433/<数据库名>?driver=ODBC+Driver+18+for+SQL+Server&Encrypt=yes&ColumnEncryption=AzureKeyVault
Azure托管身份登录场景(无需硬编码密码)
mssql+pyodbc://@<Azure SQL服务器地址>:1433/<数据库名>?driver=ODBC+Driver+18+for+SQL+Server&Encrypt=yes&ColumnEncryption=AzureKeyVault&Authentication=ActiveDirectoryMsi
核心参数说明:
ColumnEncryption=AzureKeyVault是开启自动加解密的必填参数,配置后驱动会自动对接AKV完成加密列的处理,不需要额外编写加解密代码。
2. pymssql驱动(仅手动加密场景使用)
pymssql对Always Encrypted支持度有限,仅适合已经手动完成字段加密的场景,连接字符串模板如下:
mssql+pymssql://<sql用户名>:<sql密码>@<Azure SQL服务器地址>:1433/<数据库名>?charset=utf8&Encrypt=yes
内容的提问来源于stack exchange,提问作者user8208955
相关产品推荐
相关产品推荐

