You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自托管Microsoft Dynamics CRM 2016是否支持数据库级自定义字段加密

结论

需求完全可以实现,仅针对自定义字段做SQL内置对称加密不会破坏Dynamics CRM 2016自托管版本的正常运行。

实现前提

你使用的是本地自托管部署的非Online版本,拥有SQL Server数据库的完全操作权限,这是使用SQL原生加密方案的基础,Online版本因为不开放底层数据库权限无法采用该方案,但你的部署环境完全满足要求。

关键实现步骤
  • 第一步先定位自定义字段对应的数据库存储位置:Dynamics CRM的所有自定义字段都会同步到对应实体的[实体名]Base表中,比如你在联系人实体新建的自定义敏感字段new_idcard,对应就是ContactBase表中的new_idcard字段。如果加密后存储的是varbinary类型的密文,建议你直接在CRM中新建类型为「二进制」的自定义字段存储密文,不要直接修改原有文本类型自定义字段的数据库属性,避免触发CRM元数据校验错误。
  • 第二步配置SQL对称加密:按标准SQL Server对称加密流程操作即可,示例流程如下:
-- 创建数据库主密钥
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '你设置的强密码';
-- 创建加密用证书
CREATE CERTIFICATE CRM_Sensitive_Cert WITH SUBJECT = 'CRM敏感字段加密证书';
-- 创建对称密钥
CREATE SYMMETRIC KEY CRM_Sensitive_Key WITH ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE CRM_Sensitive_Cert;

加密字段调用EncryptByKey(Key_GUID('CRM_Sensitive_Key'), '明文内容')即可,解密用CONVERT(nvarchar(255), DecryptByKey(密文字段))转换为明文。

  • 第三步做CRM读写逻辑适配:因为数据库层面存的是密文,直接返回给CRM前端会显示乱码,你需要分别注册两个CRM插件:
    • 预创建、预更新插件:在数据写入数据库之前,把用户输入的明文敏感内容用SQL加密函数处理成密文再存入对应字段
    • 预检索插件:在数据从数据库读出返回给前端之前,调用SQL解密函数把密文转成明文,前端用户感知不到加密逻辑的存在,原有表单、视图、报表都可以正常使用。
注意事项
  • 所有操作仅可针对你自行创建的自定义字段,禁止修改CRM系统原生字段的属性、存储内容,否则会导致CRM系统更新、补丁安装失败,严重时会触发元数据异常导致对应实体不可用。
  • 数据库主密钥、证书、对称密钥一定要单独离线备份,不要和CRM数据库、服务器存储在同一环境,一旦密钥丢失所有加密的敏感数据将无法恢复。
  • 加密后的密文字段无法直接用于数据库层面的模糊检索、排序操作,如果有这类需求,建议额外存储该字段的加盐哈希值用于等值检索,不要直接对密文做筛选操作。

内容的提问来源于stack exchange,提问作者ichachan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:24:04