搭建基于tSQLt的Azure SQL数据库单元测试DevOps环境:本地测试问题求助
解决SQL Server Express与Azure SQL的测试部署兼容问题
环境
- 搭载Azure SQL的服务器
- 本地SQL Server Express环境
- 使用SSDT部署数据库
测试与部署计划
- [开发人员] 开发阶段在本地SQL Server Express上运行数据库单元测试
- [DevOps] 代码提交后,流水线运行所有单元测试,全部通过后执行部署
遇到的具体问题
测试1 - SQL Server Express 2019
测试项目部署失败,因Azure SQL使用特定版本tSQLt(1.0.5873.27393),触发错误:
CREATE or ALTER ASSEMBLY for assembly 'tSQLtCLR' with the SAFE or EXTERNAL_ACCESS option failed because the 'clr strict security' option of sp_configure is set to 1.
测试2 - SQL Server Express 2014
查询SELECT @@VERSION显示版本号均为12.0.2000.8,但部署时触发错误:
A project which specifies Microsoft Azure SQL Database v12 as the target platform cannot be published to SQL Server 2014
现有备选方案及顾虑
- 搭建两个不同项目,共享测试用例:一个适配Azure SQL的tSQLt版本,一个适配本地SQL Server Express 2019的tSQLt版本,但不确定两者实现差异是否会引发不可预料的错误
- 为每位开发人员创建独立Azure SQL实例并行测试,合理性存疑
可行解决方案及优化建议
方案1:调整本地SQL Server Express 2019的CLR安全配置
针对Express 2019的CLR错误,可在本地开发环境执行以下操作:
- 启用高级配置选项:
sp_configure 'show advanced options', 1; RECONFIGURE; - 临时关闭
clr strict security以部署tSQLt:sp_configure 'clr strict security', 0; RECONFIGURE; - 部署完成后,建议重新开启该选项以保持本地环境的安全性:
注意:此操作仅适用于本地开发,生产环境必须保持默认安全配置。sp_configure 'clr strict security', 1; RECONFIGURE;
方案2:使用SSDT多发布配置适配不同环境
针对Express 2014的目标平台错误,无需切换项目基础设置,只需创建两个SSDT发布配置:
- 一个配置将目标平台设为
SQL Server 2014,用于本地测试部署 - 另一个配置保持
Azure SQL Database v12,用于流水线部署
开发时选择对应配置即可,避免来回修改项目设置。
方案3:用Docker容器模拟Azure SQL本地环境
彻底规避版本差异问题,使用Azure SQL Edge镜像在本地搭建兼容环境:
- 拉取镜像:
docker pull mcr.microsoft.com/azure-sql-edge - 启动容器(替换密码为自定义强密码):
该环境与Azure SQL兼容性极高,无需调整tSQLt版本或CLR配置,直接复用流水线的测试逻辑。docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=YourStrong!Passw0rd" -p 1433:1433 --name azuresqledge -d mcr.microsoft.com/azure-sql-edge
方案4:安全适配tSQLt CLR程序集(无需关闭严格安全)
若不想修改CLR全局配置,可为tSQLtCLR程序集添加安全验证:
-- 从tSQLtCLR程序集生成证书 CREATE CERTIFICATE tSQLtCertificate FROM ASSEMBLY tSQLtCLR; -- 基于证书创建登录名 CREATE LOGIN tSQLtLogin FROM CERTIFICATE tSQLtCertificate; -- 授予程序集 UNSAFE 权限 GRANT UNSAFE ASSEMBLY TO tSQLtLogin;
此方法符合SQL Server 2017+的CLR安全规范,同时兼容Azure SQL的tSQLt版本。
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

