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

如何在SQL SERVER中对字段首尾字符做掩码仅展示中间部分

SQL Server varchar字段首尾掩码、仅展示中间段的实现方案

SQL Server 内置的partial动态掩码函数仅支持「暴露首尾字符、掩码中间段」的逻辑,你需要的「掩码首尾段、仅暴露中间6位+带分隔符」的效果无法直接通过原生partial实现,可通过以下两种常用方案实现:

方案1:视图权限控制(无表结构修改,兼容性最高)

该方案通过权限隔离实现掩码效果,普通业务用户仅能访问视图、拿到掩码后的字段值,高权限管理员可直接访问原表获取完整明文:

  1. 创建业务视图,在视图中编写自定义掩码逻辑:
CREATE VIEW Data.vw_Membership
AS
SELECT
    -- 其他原有字段直接列出即可
    'xxxx-' + SUBSTRING(LastName, 5, 6) + '-xxxx' AS LastName
FROM Data.Membership;

如果存在字段长度不足14位的场景,可增加长度判断避免异常:

'xxxx-' + CASE WHEN LEN(LastName) >= 10 THEN SUBSTRING(LastName, 5, 6) ELSE '******' END + '-xxxx' AS LastName
  1. 配置权限:拒绝普通用户角色访问Data.Membership原表,仅授予该角色Data.vw_Membership视图的查询权限即可。

方案2:计算列+原生动态掩码(兼容原有掩码权限体系)

如果你的业务已经依赖SQL Server原生动态数据掩码的权限控制逻辑(即同一字段不同权限用户可见不同内容),可以通过新增计算列实现:

  1. 重命名原明文存储的LastName字段,仅对高权限角色开放该字段的访问权限:
EXEC sp_rename 'Data.Membership.LastName', 'LastName_Plain', 'COLUMN';
  1. 新增带掩码的计算列,作为对外暴露的LastName字段:
ALTER TABLE Data.Membership
ADD LastName AS ('xxxx-' + SUBSTRING(LastName_Plain, 5, 6) + '-xxxx')
MASKED WITH (FUNCTION = 'partial(0,"***-***-***",0)');

该配置下:

  • 拥有UNMASK权限的用户,可看到符合你要求的格式化掩码结果:xxxx-567890-xxxx
  • 无UNMASK权限的用户,会看到计算列配置的统一掩码:***-***-***(可自行修改为需要的默认掩码值)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:15:00