使用PowerShell配置Always Encrypted CNG时遇类型加载异常求助
解决Always Encrypted PowerShell脚本的Azure KeyVault依赖错误
问题原因
即使未使用Azure KeyVault功能,SqlServer PowerShell模块的Always Encrypted组件仍依赖Azure相关程序集。当系统中安装的Microsoft.Azure.KeyVault版本与模块预期版本不兼容(如缺失get_SerializationSettings方法)时,就会触发类型初始化异常。
解决步骤
1. 更新SqlServer PowerShell模块到最新稳定版
旧版本的SqlServer模块可能存在依赖兼容问题,优先更新模块:
# 查看已安装的SqlServer模块版本 Get-Module -ListAvailable SqlServer # 更新到最新版本 Update-Module -Name SqlServer -Force
2. 修复Azure KeyVault组件依赖
卸载冲突的旧版Microsoft.Azure.KeyVault模块,安装与SqlServer模块兼容的版本:
# 卸载所有旧版本 Uninstall-Module -Name Microsoft.Azure.KeyVault -AllVersions -Force # 安装兼容版本(推荐2.4.0,适配多数SqlServer模块版本) Install-Module -Name Microsoft.Azure.KeyVault -RequiredVersion 2.4.0 -Force
若仍有问题,可尝试安装最新版Az.KeyVault模块(Azure官方新模块,兼容性更好):
Install-Module -Name Az.KeyVault -Force
3. 检查并升级.NET Framework版本
Always Encrypted组件要求.NET Framework 4.7.2及以上版本,若系统版本过低,需安装官方最新兼容版本。
4. 替代方案:使用SSMS生成加密值
如果PowerShell模块问题无法快速解决,可通过SQL Server Management Studio(SSMS)图形界面生成列加密密钥的加密值:
- 连接到目标数据库,展开“安全性”>“列主密钥”
- 右键目标列主密钥,选择“生成列加密密钥”
- 生成后复制加密值,直接在脚本中使用
内容的提问来源于stack exchange,提问作者Sotem
相关产品推荐
相关产品推荐

