导读:本期聚焦于小伙伴创作的《SQLServer动态掩码是什么?如何配置和使用动态掩码保护敏感数据》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《SQLServer动态掩码是什么?如何配置和使用动态掩码保护敏感数据》有用,将其分享出去将是对创作者最好的鼓励。

SQLServer动态掩码是SQLServer 2016及更高版本引入的原生数据安全特性,它可以在数据查询返回时自动对指定字段的内容进行格式化遮挡,不需要修改底层存储的数据,也不需要调整应用层的查询逻辑,就能实现敏感数据的按需展示,大幅降低数据泄露的风险。

SQLServer动态掩码是什么?如何配置和使用动态掩码保护敏感数据

动态掩码的核心特性

动态掩码的工作逻辑是在查询执行返回结果阶段生效,底层表存储的仍然是完整的原始数据,仅对未授权的查询用户展示掩码后的内容。它的核心特性包括:

  • 无需修改应用代码,仅通过数据库层的配置即可生效
  • 支持多种预设掩码规则,可覆盖大部分常见敏感数据类型
  • 可以针对不同的数据库用户设置不同的掩码权限,授权用户可查看完整数据
  • 不影响数据的写入、更新和底层存储逻辑

支持的掩码函数类型

SQLServer动态掩码提供了四种内置的掩码函数,可根据字段的实际类型选择合适的规则:

掩码函数适用场景示例效果
默认掩码字符串、数值、日期时间等通用类型字符串显示为xxxx,数值显示为0,日期显示为1900-01-01
邮箱掩码邮箱地址字段test@ippipp.com 显示为 txxx@xxxx.com
随机掩码数值类型字段指定范围内的随机数值,每次查询结果可能不同
自定义字符串掩码固定格式的字符串如手机号、身份证号可指定前缀、后缀保留长度,中间部分用指定字符填充

动态掩码的配置步骤

1. 创建测试表并添加掩码规则

可以在创建表的时候直接为字段添加动态掩码,也可以对已有表添加掩码规则。以下是创建包含掩码规则的测试表的示例:

-- 创建测试用户表,包含多个敏感字段并配置动态掩码
CREATE TABLE UserInfo (
    UserId INT PRIMARY KEY IDENTITY(1,1),
    UserName NVARCHAR(50) NOT NULL,
    -- 手机号使用自定义字符串掩码,保留前3位和后4位,中间用*填充
    PhoneNumber NVARCHAR(20) MASKED WITH (FUNCTION = 'partial(3,"****",4)') NULL,
    -- 邮箱使用邮箱掩码
    Email NVARCHAR(100) MASKED WITH (FUNCTION = 'email()') NULL,
    -- 身份证号使用自定义字符串掩码,保留前1位和后4位,中间用*填充
    IDCard NVARCHAR(20) MASKED WITH (FUNCTION = 'partial(1,"**************",4)') NULL,
    -- 工资使用默认掩码,未授权用户查看时显示为0
    Salary DECIMAL(18,2) MASKED WITH (FUNCTION = 'default()') NULL,
    -- 随机掩码,生成1000到5000之间的随机数值
    RandomValue INT MASKED WITH (FUNCTION = 'random(1000,5000)') NULL
);

2. 插入测试数据

向测试表中插入几条模拟数据,用于后续验证掩码效果:

INSERT INTO UserInfo (UserName, PhoneNumber, Email, IDCard, Salary, RandomValue)
VALUES 
('张三', '13812345678', 'zhangsan@ipipp.com', '110101199001011234', 15000.50, 0),
('李四', '13987654321', 'lisi@ipipp.com', '310101199502022345', 20000.00, 0),
('王五', '13611112222', 'wangwu@ipipp.com', '440101198803033456', 18000.75, 0);

3. 验证掩码效果

首先使用具有表查询权限的普通用户执行查询,查看掩码后的结果:

-- 假设当前登录用户是未授权的普通用户,执行查询
SELECT * FROM UserInfo;

此时查询结果中,PhoneNumber会显示为138****5678,Email显示为zxxx@xxxx.com,IDCard显示为1**************1234,Salary显示为0.00,RandomValue显示为1000到5000之间的随机数值。

如果使用具有UNMASK权限的用户查询,就可以看到完整的原始数据:

-- 授予当前用户UNMASK权限,查看完整数据
GRANT UNMASK ON UserInfo TO [当前用户名];
-- 再次查询,可看到所有字段的完整原始数据
SELECT * FROM UserInfo;
-- 回收UNMASK权限
REVOKE UNMASK ON UserInfo TO [当前用户名];

已有表添加或修改掩码规则

如果表已经存在,可以通过ALTER TABLE语句为字段添加动态掩码,或者修改已有的掩码规则:

-- 为已有表的字段添加动态掩码
ALTER TABLE UserInfo
ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()');

-- 修改已有字段的掩码规则
ALTER TABLE UserInfo
ALTER COLUMN PhoneNumber VARCHAR(20) MASKED WITH (FUNCTION = 'partial(3,"#####",4)');

-- 删除字段的动态掩码规则
ALTER TABLE UserInfo
ALTER COLUMN PhoneNumber DROP MASKED;

动态掩码的注意事项

  • 动态掩码仅对SELECT查询生效,不影响INSERT、UPDATE、DELETE操作,写入和更新时仍然使用原始数据
  • 拥有CONTROL权限的用户、db_owner角色成员默认拥有UNMASK权限,可查看完整数据
  • 动态掩码不能替代加密,它只是展示层的遮挡,有高权限的用户仍然可以获取完整数据,敏感数据建议结合透明数据加密等功能使用
  • 如果查询中使用了函数处理掩码字段,可能会导致掩码失效,比如使用CAST转换字段类型后再查询,可能会返回原始数据
动态掩码是SQLServer轻量级的敏感数据保护方案,适合快速对现有系统的敏感字段做展示层防护,不需要重构应用代码,部署成本极低,是数据库安全加固的常用手段之一。

SQLServer动态掩码dynamic_data_masking敏感数据保护T-SQL修改时间:2026-07-14 09:33:31

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。