暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

产品解读 | GreatDB数据脱敏特性 捍卫客户数据安全

万里数据库 2025-04-18
238

 

安全数据库GreatDB作为万里数据库自主研发的一款核心数据库产品,于2023年底首批通过安全可靠测评,可根据用户需求选择集中式或分布式方式部署。


GreatDB拥有哪些特性?解决了用户的哪些痛点难题?基于此,万里数据库悉心推出【产品解读】专栏,将从非阻塞式DDL、读写分离、备份方式等多个维度深入阐述GreatDB产品特性,帮您了解并用好GreatDB~


01

什么是数据脱敏?


数据脱敏是指对敏感数据进行变形、转换或屏蔽等处理,使其在不影响数据使用价值的前提下,降低数据的敏感性,保护数据所涉及的个人隐私、商业机密或其他敏感信息不被泄露的技术手段。


02

数据脱敏需求场景


1. 应对内外部威胁

数据库管理员、开发 测试人员、第三方合作方可能因权限过大或操作不当接触敏感数据,脱敏可降低 “无意泄露” 或 “恶意窃取” 的风险。


2. 减少数据暴露面

在数据共享、迁移、备份、分析等场景中,敏感数据可能被不必要地扩散。


3. 安全的数据共享与协作

企业与合作伙伴、第三方机构共享数据时,需在数据价值利用与隐私保护间实现平衡。脱敏后的数据可用于联合建模、业务分析等,同时避免核心数据资产流失。


4. 开发测试环境的安全保障

开发 测试阶段需要真实的数据,用来验证业务逻辑,但直接使用生产数据,存在极大安全隐患,因此需要数据脱敏。


03

GreatDB如何实现数据脱敏?


安全数据库GreatDB在数据库服务器上实现了数据脱敏功能。DBA可制定数据脱敏策略(脱敏算法),并将脱敏策略应用到数据表的列上,非脱敏特权用户在查询脱敏数据列时,查询结果中,脱敏数据列会显示为脱敏后的数据,即通过脱敏算法处理后的数据,从而限制了非授权用户对隐私数据的访问。


GreatDB数据脱敏-相关概念解释:

  • 脱敏标签:指数据库表中需要脱敏字段的别名;

  • 脱敏策略:指对脱敏字段数据施加的脱敏算法及参数;

  • 脱敏特权用户:指拥有super权限的用户和使用sys_masking.policy_add_user特别指定的用户。对于脱敏特权用户,脱敏数据列将不进行脱敏处理。


04

如何使用GreatDB数据脱敏功能?


1)安装脱敏元数据库sys_masking

    source  $GREATDB_HOME/share/sys_masking.sql

    备注:$GREATDB_HOME 是GreatDB的安装目录。


    2)创建脱敏标签

      sys_masking.create_label'db_name''table_name''field_name' , 'mask_label_name');


      功能:创建脱敏标签,指向需要脱敏的字段,允许一个脱敏标签指向多个字段。


      参数:

      •db_name :数据库的名称 (不区分大小写)

      •table_name :表名称 (不区分大小写)

      •field_name :字段名称 (不区分大小写)

      •mask_label_name :脱敏标签名称


      3)创建脱敏策略

        sys_masking.create_policy('policy_name','mask_function''args')

        功能:创建脱敏策略,为脱敏策略指定脱敏函数及参数。


        参数:

        •policy_name :策略名称 , 字符长度必须大于1

        •mask_function :脱敏函数名称 ,当前支持maskall和mask_inside

        •args :脱敏函数的参数,多个参数使用逗号进行分割;不指定或者指定为'',将使用默认参数。


        4)将脱敏策略施加到脱敏标签

          sys_masking.policy_add_label('policy_name''mask_label_name')

          功能:将脱敏策略应用到脱敏标签,一个脱敏标签只能有一个脱敏策略。

          参数:

          •policy_name :脱敏策略名称  

          •mask_label_name:脱敏标签名称


          5)添加脱敏特权用户

            sys_masking.policy_add_user('policy_name''user_name');

            功能: 添加排除脱敏策略之外的脱敏特权用户。

            参数:

            •policy_name :脱敏策略名称

            •user_name:对上面脱敏策略豁免的用户名, 格式为 username@hostname


            05

            测试验证


            脱敏方案设计:针对tpccdb的表bmsql_customer进行脱敏,c_phone列都替换为9,c_street_1和c_street_2替换为*,同时允许用户readuser1查看c_phone的真实数据。


              ##-- 检查tpccdb数据库下的表bmsql_customer结构
              GreatDB V1.0> desc bmsql_customer;
              +----------------+---------------+------+-----+---------+-------+
              | Field          | Type          | Null | Key | Default | Extra |
              +----------------+---------------+------+-----+---------+-------+
              | c_w_id         | int           | NO   | PRI | NULL    |       |
              | c_d_id         | int           | NO   | PRI | NULL    |       |
              | c_id           | int           | NO   | PRI | NULL    |       |
              | c_discount     | decimal(4,4)  | YES  |     | NULL    |       |
              | c_credit       | char(2)       | YES  |     | NULL    |       |
              | c_last         | varchar(16)   | YES  |     | NULL    |       |
              | c_first        | varchar(16)   | YES  |     | NULL    |       |
              | c_credit_lim   | decimal(12,2| YES  |     | NULL    |       |
              | c_balance      | decimal(12,2| YES  |     | NULL    |       |
              | c_ytd_payment  | decimal(12,2| YES  |     | NULL    |       |
              | c_payment_cnt  | int           | YES  |     | NULL    |       |
              | c_delivery_cnt | int           | YES  |     | NULL    |       |
              | c_street_1     | varchar(20)   | YES  |     | NULL    |       |
              | c_street_2     | varchar(20)   | YES  |     | NULL    |       |
              | c_city         | varchar(20)   | YES  |     | NULL    |       |
              | c_state        | char(2)       | YES  |     | NULL    |       |
              | c_zip          | char(9)       | YES  |     | NULL    |       |
              | c_phone        | char(16)      | YES  |     | NULL    |       |
              | c_since        | timestamp     | YES  |     | NULL    |       |
              | c_middle       | char(2)       | YES  |     | NULL    |       |
              | c_data         | varchar(500)  | YES  |     | NULL    |       |
              +----------------+---------------+------+-----+---------+-------+
              21 rows in set (0.02 sec)


              1)创建一个只读用户readuser和readuser1,使用户查询脱敏数据

                ##-- 创建测试用readuser和readuser1
                create user readuser identified by 'readpass'
                grant select on *.* to readuser;
                grant PROCESS on *.* to readuser;
                GRANT LOCK TABLES ON tpccdb.* TO readuser;
                create user readuser1 identified by 'readpass'
                grant select on *.* to readuser1;


                2)调用sys_masking的函数实现脱敏策略

                  ##-- 创建脱敏标签bmsql_customer.phone
                  CALL sys_masking.create_label('tpccdb''bmsql_customer''c_phone''bmsql_customer.phone') ;                                 
                  ##-- 创建脱敏标签bmsql_customer.street
                  CALL sys_masking.create_label('tpccdb''bmsql_customer''c_street_1''bmsql_customer.street') ;
                  CALL sys_masking.create_label('tpccdb''bmsql_customer''c_street_2''bmsql_customer.street') ;   
                  ##-- 创建脱敏策略policy_maskall9,全部替换为9
                  CALL sys_masking.create_policy('policy_maskall9''maskall''9' ) ;
                  ##-- 创建脱敏策略policy_maskall*,全部替换为*
                  CALL sys_masking.create_policy('policy_maskall*''maskall''*' ) ;
                  mask_inside(str, margin1, margin2 [, mask_char]) 
                  ##-- 将脱敏策略应用到脱敏标签
                  CALL sys_masking.policy_add_label('policy_maskall9''bmsql_customer.phone');
                  CALL sys_masking.policy_add_label('policy_maskall*''bmsql_customer.street');
                  ##-- 添加特权用户readuser1@%豁免脱敏策略policy_maskall9
                  CALL sys_masking.policy_add_user('policy_maskall9''readuser1@%');


                  3)脱敏数据查询,确认脱敏列已脱敏


                  readuser用登录后,查询结果:

                    GreatDB V1.0> select c_id,c_zip,c_street_1,c_street_2,c_phone from bmsql_customer limit 10;
                    +------+-----------+----------------------+----------------------+------------------+
                    | c_id | c_zip     | c_street_1           | c_street_2           | c_phone          |
                    +------+-----------+----------------------+----------------------+------------------+
                    |    1 | 912211111 | **************       | *************        | 9999999999999999 |
                    |    2 | 749611111 | **********           | ************         | 9999999999999999 |
                    |    3 | 959011111 | ******************** | ***************      | 9999999999999999 |
                    |    4 | 427311111 | ***********          | ******************   | 9999999999999999 |
                    |    5 | 698111111 | *******************  | ******************   | 9999999999999999 |
                    |    6 | 765611111 | *******************  | ******************   | 9999999999999999 |
                    |    7 | 417011111 | ************         | ************         | 9999999999999999 |
                    |    8 | 806011111 | **************       | **************       | 9999999999999999 |
                    |    9 | 549711111 | *******************  | ******************** | 9999999999999999 |
                    |   10 | 329811111 | **********           | *************        | 9999999999999999 |
                    +------+-----------+----------------------+----------------------+------------------+
                    10 rows in set (0.01 sec)


                    实现了脱敏方案设计:c_phone列都替换为9,c_street_1和c_street_2替换为*


                    readuser1的查询结果:

                      GreatDB V1.0> select c_id,c_zip,c_street_1,c_street_2,c_phone from bmsql_customer limit 10;
                      +------+-----------+----------------------+----------------------+------------------+
                      |c_id  | c_zip     | c_street_1           | c_street_2           | c_phone          |
                      +------+-----------+----------------------+----------------------+------------------+
                      |    1 | 912211111 | ***************       | *************        | 1331460095850705 |
                      |    2 | 749611111 | **********           | ************         | 6582303057609489 |
                      |    3 | 959011111 | ******************** | ***************      | 4682297596375316 |
                      |    4 | 427311111 | ***********          | ******************   | 7403039273118317 |
                      |    5 | 698111111 | *******************  | ******************   | 1573713730341581 |
                      |    6 | 765611111 | *******************  | ******************   | 7839165491380732 |
                      |    7 | 417011111 | ************         | ************         | 0406886203637324 |
                      |    8 | 806011111 | **************       | **************       | 4705093824634267 |
                      |    9 | 549711111 | *******************  | ******************** | 5705799209973197 |
                      |   10 | 329811111 | **********           | *************        | 9329119448979110 |
                      +------+-----------+----------------------+----------------------+------------------+
                      10 rows in set (0.01 sec)


                      对于readuser1豁免了c_phone列的数据脱敏。


                      4)使用greatdbdump导出脱敏表,脱敏列数据已脱敏

                        greatdbdump -ureaduser -preadpass -h127.0.0.1 --set-gtid-purged=off tpccdb bmsql_customer >aa.sql

                        检查aa.sql,确认脱敏列数据已脱敏。

                          INSERT INTO `bmsql_customer` VALUES 
                          (3,1,1,0.2553,'GC','BARBARBAR','zWzbrTjItbR',50000.00,-8692.49,8692.49,4,1,'**************','*************','iafbzpZWvUN','ID','912211111','9999999999999999'
                          ,'2025-03-25 
                          07:20:34','OE','j2uYpkt1vvrKuuMEguq1xf3YpAAyXWhfu0638OzQ4AqPQLa4RsycmXyAE9XZttvg5HivMiw7wcjiO8BaUzHjEQlVCGplwAEnMEQWPAcGOZq8zPbHoOSN0RWwN8t8z2BS3LLgb4sGMnOjHq2Qs2PTHMHqvE41jGvmrqOn
                          bWFXcbX5pxtB9xAYD6KxxYvVPRNO1jlLUUxcoBoBkRd81w4tgWpBEXKuT6XQp1oUCC1Uk2fJmzjnrKEpKPaX1GaNM2CoLC356npEysPOn91bNB9GjiCJHq0fZrokLyTpwFmmSeGOWZ82GbhX2ALd54ZPzrebbE6gtOD5lkk8OQJ2xKERavP5FNzNR3BnHIlaz
                          SjOEfIHoAQdo'),(3,1,2,0.1115,'GC','BARBAROUGHT','eaXrWk9YaO',50000.00,50309.95,4709.85,3,2,'**********','************','PVBNFb7u0B','EB','749611111','9999999999999999','2025-03-25 07:20:34','OE
                          ','gBqmE2FiYMTthR9E5yH8kivcUs7KtVNlEyaCSJgatSe8TNcpWnwiE6G2bSAJBBK2kOCOsYoSgxLD44kN82A3QabFd9pJGd4PUyklG3a3Dg1E94qLHwyGnv16DGnN7xcGuS1Owcx3z4SaSsoIo6ln49ttoYefvdqouOdgwPCLt4cpdAQcplulv6qIRoIxQK
                          HIN7FIJ3fhHXkuW9oKtQjNv38ZUmbVozIWox7Fi0eRcfefQH8BAccrnlAvuJTAk4PaEiqPJ9adAnKYsAf772MKsiHIWiyhb8wtUJN1pfUHyNnWXkzqHqvAtXpCiQpL3ZqOakKjt6cyCG9LIgSeLCCYnpSyFr5jrjp3QKTghmQdYGt0k30dP9FBB1gATa8tr9k
                          fk7WtkMgd5nZRnG31ehgLYhgGdirgG9CmLb7x4jy3B1ZWdDok43HBF6KbYT8GFaNzRe8wU5HGm19FqilPZJuCE')
                          ......


                          06

                          总  结


                          安全数据库GreatDB的数据脱敏功能,可以帮助客户实现数据库整体的脱敏目标。不仅允许DBA制定数据脱敏策略,将脱敏策略应用到数据表的列上,限制了非授权用户对隐私数据的访问,同时又对脱敏特权用户的脱敏行为进行赦免,保留了脱敏设置的灵活性。


                          基于此,安全数据库GreatDB为客户应对内外部敏感数据泄露威胁、减少数据暴露面,实现安全的数据共享与协作,以及为开发测试环境带来安全保障等维度均提供了有效的解决方案。



                          产品解读 | GreatDB特性——非阻塞式DDL

                          项目纪实 | 版本升级操作get!GreatDB分布式升级过程详解

                          技术干货 | GreatDB新一代读写分离架构,如何炼就近乎0损耗的性能?

                          关于万里数据库


                          北京万里开源软件有限公司(简称“万里数据库”)成立于2000年,是专注于国产自主可控数据库产品研发的国家高新技术企业、国家级专精特新“小巨人”企业,拥有发明专利、软件著作权百余项。


                          万里数据库的技术底蕴源自对底层核心代码的掌控,产品始终坚持以“极致稳定、极致性能、极致易用”为目标,经过20余年的研发经验积累,产品在功能、性能、稳定、易用等方面均处于行业领先水平,广泛应用于金融、运营商、能源、政府、交通等行业重要业务系统中的超2000个业务场景,得到了用户和市场的认可与肯定。


                          2021年,公司创立GreatSQL开源社区,通过对MySQL技术的优化,目前已成长为国内活跃的自主开源数据库社区


                          极致稳定  极致性能  极致易用


                          “在看”点一下,万里早知道

                          文章转载自万里数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                          评论