如何在SQL SERVER中对字段首尾字符做掩码仅展示中间部分
SQL Server varchar字段首尾掩码、仅展示中间段的实现方案
SQL Server 内置的
partial动态掩码函数仅支持「暴露首尾字符、掩码中间段」的逻辑,你需要的「掩码首尾段、仅暴露中间6位+带分隔符」的效果无法直接通过原生partial实现,可通过以下两种常用方案实现:
方案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
- 配置权限:拒绝普通用户角色访问
Data.Membership原表,仅授予该角色Data.vw_Membership视图的查询权限即可。
方案2:计算列+原生动态掩码(兼容原有掩码权限体系)
如果你的业务已经依赖SQL Server原生动态数据掩码的权限控制逻辑(即同一字段不同权限用户可见不同内容),可以通过新增计算列实现:
- 重命名原明文存储的LastName字段,仅对高权限角色开放该字段的访问权限:
EXEC sp_rename 'Data.Membership.LastName', 'LastName_Plain', 'COLUMN';
- 新增带掩码的计算列,作为对外暴露的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
相关产品推荐
相关产品推荐

