0

0

如何用C#实现数据库的数据掩码?动态隐藏敏感数据?

畫卷琴夢

畫卷琴夢

发布时间:2025-09-23 08:03:01

|

1039人浏览过

|

来源于php中文网

原创

答案:在C#中实现数据掩码的核心是在数据返回前端前对敏感字段进行动态处理。1. 可通过实体类添加只读掩码属性,如MaskedPhone和MaskedEmail,在不改变原始数据的前提下安全展示;2. 结合AutoMapper在对象映射时自动应用掩码逻辑,提升代码复用性;3. 根据用户角色或权限条件判断是否启用掩码,实现细粒度控制;4. 高安全场景可配合数据库视图返回掩码数据,减少敏感信息暴露风险。推荐优先在服务层处理掩码,兼顾灵活性与权限管理,同时保留原始字段用于内部业务逻辑。

如何用c#实现数据库的数据掩码?动态隐藏敏感数据?

在C#中实现数据库数据掩码,核心思路是在数据读取或返回前端前,对敏感字段进行动态处理,而不是直接暴露原始数据。这种方式既能保证数据安全,又不影响数据库存储和业务逻辑。以下是几种实用的实现方式。

1. 在实体模型中添加掩码属性

通过在C#实体类中定义只读属性,对敏感字段(如手机号、身份证号)进行动态掩码处理,原始数据仍可用于内部逻辑。

示例:

假设有一个用户实体:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Phone { get; set; }  // 原始数据
    public string Email { get; set; }
// 掩码后的手机号:138****1234
public string MaskedPhone => string.IsNullOrEmpty(Phone)
    ? null
    : $"{Phone.Substring(0, 3)}****{Phone.Substring(Phone.Length - 4)}";

// 掩码邮箱:z***@example.com
public string MaskedEmail => string.IsNullOrEmpty(Email)
    ? null
    : $"{Email[0]}***{Email.Substring(Email.IndexOf('@'))}";

}

查询数据后直接使用 MaskedPhoneMaskedEmail 返回给前端,原始字段仍可用于日志、权限校验等。

2. 使用 AutoMapper 实现动态映射与掩码

如果项目使用了 AutoMapper,可以在映射配置中加入自定义格式化逻辑,实现自动掩码。

示例:
cfg.CreateMap()
   .ForMember(dest => dest.Phone, opt => opt.MapFrom(src =>
       string.IsNullOrEmpty(src.Phone) ? null :
       $"{src.Phone.Substring(0, 3)}****{src.Phone.Substring(src.Phone.Length - 4)}"))
   .ForMember(dest => dest.Email, opt => opt.MapFrom(src =>
       string.IsNullOrEmpty(src.Email) ? null :
       $"{src.Email[0]}***{src.Email.Substring(src.Email.IndexOf('@'))}"));

这样在调用 Mapper.Map(user) 时,输出的数据已自动掩码。

蓝色大气通用企业公司网站2.0
蓝色大气通用企业公司网站2.0

蓝色大气通用企业公司网站源码,这是一款采用经典的三层结构,可以动态、伪静态模式,后台功能实用,界面大气,无限级分类,单篇栏目添加等的企业网站源码,比较适合二次开发或者企业自用,感兴趣的可以下载看一下啊。网站源码完整,后台是我作为程序员多年认为最为好用的一款后台,有时间我将发布更多的模板供大家下载使用,数据库为ACCESS,如需MSSQL数据库可与我联系。功能介绍:【新闻文章管理】可以发布公司新闻和

下载

3. 基于角色或上下文的条件掩码

某些场景下,管理员可查看完整数据,普通用户只能看掩码。可在服务层根据当前用户权限动态决定是否掩码。

示例:
public UserDto ToDto(User user, bool isAuthorized)
{
    return new UserDto
    {
        Id = user.Id,
        Name = user.Name,
        Phone = isAuthorized ? user.Phone : MaskPhone(user.Phone),
        Email = isAuthorized ? user.Email : MaskEmail(user.Email)
    };
}

private string MaskPhone(string phone) { return string.IsNullOrEmpty(phone) ? null : $"{phone.Substring(0, 3)}****{phone.Substring(phone.Length - 4)}"; }

结合 ASP.NET Core 中的 User.IsInRole() 或自定义策略,灵活控制数据可见性。

4. 数据库层面配合(可选增强)

虽然C#层处理更灵活,但高安全场景可结合数据库视图或函数返回掩码数据。例如在 SQL Server 创建视图:

CREATE VIEW v_UserSafe AS
SELECT 
    Id,
    Name,
    LEFT(Phone, 3) + '****' + RIGHT(Phone, 4) AS MaskedPhone,
    SUBSTRING(Email, 1, 1) + '***' + SUBSTRING(Email, CHARINDEX('@', Email), LEN(Email)) AS MaskedEmail
FROM Users;

C#代码中查询该视图即可,进一步减少敏感数据在网络中的暴露风险。

基本上就这些。关键在于根据实际需求选择在应用层还是数据库层做掩码,推荐优先在C#服务层处理,灵活性高且易于维护权限逻辑。不复杂但容易忽略的是:始终保留原始字段用于合法用途,仅在展示时掩码。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

674

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

319

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

345

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1084

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

355

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

671

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

566

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

408

2024.04.29

桌面文件位置介绍
桌面文件位置介绍

本专题整合了桌面文件相关教程,阅读专题下面的文章了解更多内容。

0

2025.12.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 7.6万人学习

CSS3 教程
CSS3 教程

共18课时 | 4.1万人学习

Vue 教程
Vue 教程

共42课时 | 5.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号