Skip to main content

数据安全

简介

ArcGraph 支持数据脱敏功能,数据脱敏功能是一项重要的安全特性,它可以通过对敏感数据的脱敏处理来保护数据的安全性和隐私。

数据脱敏是一种保护敏感数据的技术手段,可以提高数据的安全性、保护隐私、满足合规要求、提高数据处理效率以及实现数据共享。ArcGraph 通过合理的数据脱敏策略和技术手段,对图数据库中的敏感数据进行有效管理和保护,确保图数据库的安全性和可用性。同时,ArcGraph 的数据脱敏是基于角色的访问控制(RBAC)进行设计与实现,使得数据脱敏功能更加灵活和高效,可以更好地满足实际应用场景的需求。

实现策略

默认情况下,所有用户是可以看到敏感数据,若要使用数据脱敏功能,您需要:

  1. 定义需要脱敏的数据:通过在点类型、边类型上增加 MASKED 标识,系统将对带有该标识的数据进行脱敏处理。
  2. 定义访问受限的角色:为角色设置 Masked。拥有此角色的用户在查询已标记为 MASKED 的数据时,系统将返回经过脱敏处理后的数据。

角色权限配置

本章节主要介绍如何为角色赋予或撤销 MASKED 权限的操作。MASKED 脱敏权限,仅拥有此权限的角色能够访问经过脱敏处理的图数据且无法获取数据的真实值。更多关于权限的操作,详情请参见 权限 章节。

前提条件

在开始操作前,请确保当前登录用户拥有执行此操作所需权限的角色。有关权限的详细说明,详情请参见 权限 章节。

赋予权限

为角色赋予 MASKED 权限。

语法

GRANT MASKED ON GRAPH <graph_name> TO <roleName>;

详细说明

  • <graph_name>:图名称。
  • <roleName>:角色名称,该角色存在于 <graph_name> 图中。

示例
给“rolea”角色赋予 MASKED 权限。

GRANT MASKED TO rolea;

撤销权限

为角色撤销 MASKED 权限。

REVOKE MASKED ON GRAPH <graph_name> FROM <roleName>;

详细说明

  • <graph_name>:图名称。
  • <roleName>:角色名称,该角色存在于 <graph_name> 图中。

示例
给“rolea”角色撤销 MASKED 标记。

REVOKE MASKED FROM rolea;

点类型脱敏

通过对点类型的属性增加 MASKED 标记以达到对点数据进行数据脱敏的效果,支持使用 Partial() 函数对数据进行部分脱敏,详情请参见 Partial 函数 章节。
本章节主要介绍为点类型 MASKED 标记的相关操作,点类型的更多操作介绍请参见 点类型 章节。

前提条件

在开始操作前,请确保当前登录用户拥有执行此操作所需权限的角色。有关权限的详细说明,详情请参见 权限 章节。

增加 MASKED 标记

创建包含 MASKED 标记的点类型,语法及详细说明请参见 创建点类型 章节。

示例
创建一个“person”点类型,并对 name 属性的数据全部脱敏。

CREATE VERTEX person(
primary key id int(64),
name string MASKED
);

修改 MASKED 标记

修改 MASKED 标记的点类型。

示例
修改 “person”点类型,并对 name 属性由全部脱敏修改为中间部分字符脱敏。

ALTER VERTEX person 
MODIFY name string MASKED with (function=Partial(3,"XXX",4));

删除 MASKED 标记

在修改属性时删除对应的 MASKED 标记。

示例
移除“person”点类型中针对 name 属性的脱敏操作。

ALTER VERTEX person MODIFY name string;

边类型脱敏

通过对边类型的属性增加 MASKED 标记以达到对边数据进行数据脱敏的效果,支持使用 Partial() 函数对数据进行部分脱敏,详情请参见 Partial 函数 章节。
本章节主要介绍为边类型进行 MASKED 操作的语法,更多操作介绍请参见 边类型 章节。

前提条件

在开始操作前,请确保当前登录用户拥有执行此操作所需权限的角色。有关权限的详细说明,详情请参见 权限 章节。

增加 MASKED 标记

创建包含 MASKED 标记的边类型,语法及详细说明请参见 创建边类型 章节。

示例
在“person”点类型间创建一个“knows”边类型,并对其 weight 属性的数据全部脱敏。

CREATE EDGE knows  (
weight int(64) MASKED,
FROM person TO person
)
COMMENT = '测试Edge';

修改 MASKED 标记

修改 MASKED 标记的边类型。

示例
修改 “knows”边类型,并对 weight 属性由全部脱敏修改为中间部分字符脱敏。

ALTER EDGE knows
MODIFY weight int(64) MASKED with (function=partial(3, "**",2));

删除 MASKED 标记

在修改属性时删除对应的 MASKED 标记。

示例
移除“knows”边类型中针对 weight 属性的脱敏操作。

ALTER EDGE knows MODIFY weight int(64);

应用示例

本示例主要介绍数据脱敏功能的操作方法。在其他环境中进行数据脱敏的操作方法可能会略有不同。因此,在实际操作过程中,请根据您所处的具体环境和技术栈进行相应的调整和适配。

前提条件

在开始操作前,请确保当前登录用户拥有执行此操作所需权限的角色。有关权限的详细说明,详情请参见 权限 章节。

示例

  1. 登录 ArcGraph。
  2. (可选)创建用户并赋予对应角色。
    1. 创建用户“user1”。
      CREATE USER user1 SET PASSWORD "123456";
    2. 创建角色“rolea”。
      CREATE ROLE rolea;
    3. 赋予角色 ALL 权限。
      GRANT  all on graph all to rolea;
    4. 赋予角色 MASKED 权限。
      GRANT MASKED TO rolea;
    5. 为用户关联角色“rolea”。
      GRANT ROLE rolea TO user1;
    6. (可选)退出当前用户并以“user1”用户登录。
  3. 创建图“datamaskdemo”。
    CREATE GRAPH datamaskdemo;
  4. 使用图“datamaskdemo”。
    USE GRAPH datamaskdemo;
  5. 创建点类型“person”,并对“name”属性除前 3 个字符和最后 4 个字符外的中间字符使用“XXX”符号脱敏。
    CREATE VERTEX person(
    primary key id int(64),
    name string MASKED with (function=partial(3,"XXX",4)),
    salary double MASKED
    );
  6. 创建边类型“knows”,并对“comment”属性除前 3 个字符和最后 2 个字符外的中间字符使用“**”符号脱敏。
    CREATE EDGE knows(
    weight int(64) MASKED,
    comment string MASKED with (function=partial(3, "**",2)),
    FROM person TO person)
    ;
  7. 插入点数据及边数据。
    INSERT (:person{id:1,name:"secret_name1",salary:10000.00});
    INSERT (:person{id:2,name:"secret_name2",salary:20000.00});
    INSERT (:person{id:1})-[:knows{weight:300,comment:"secret comment contents"}]->(:person{id:2});
  8. 查询数据。
    • 查询当前图中所有点。
      示例
      MATCH (n) RETURN n;    
      返回结果示例如下:
      +---------------------------------------------------------------------------------------------------------+
      | n |
      +=========================================================================================================+
      | vid: [_oid: 36990979393191936, label: person], properties: [36990979393191936, 1, secXXXame1, ********] |
      +---------------------------------------------------------------------------------------------------------+
      | vid: [_oid: 36990979393191937, label: person], properties: [36990979393191937, 2, secXXXame2, ********] |
      +---------------------------------------------------------------------------------------------------------+
    • 查询当前图中两点类型间所有边数据。
      示例
      MATCH (a:person)-[e:knows]->(b:person) RETURN e;
      返回结果示例如下:
      +-------------------------------------------------------------------------------------------------------------------------------------------------------------+
      | e |
      +=============================================================================================================================================================+
      | eid: [src: [_oid: 36990979393191936, label: person], dest: [_oid: 36990979393191937, label: person], label: knows, _ts: 0], properties: [********, sec**ts] |
      +-------------------------------------------------------------------------------------------------------------------------------------------------------------+

密码复杂性校验

密码是图数据库安全的关键防线。为了提高密码的安全性,通常会要求用户设置复杂度较高的密码。密码复杂度校验是一种安全机制,能够确保用户设置的密码达到一定的复杂性和安全性要求。这种校验机制的目的是防止恶意用户轻易破解或攻击密码,从而提高图数据库的整体安全性。ArcGraph 图数据库密码复杂性校验主要是基于密码的组成、长度、字符类型等方面进行校验,用户根据实际情况自定义密码复杂度校验规则,通过合理设置密码复杂度校验规则,ArcGraph 可以有效地控制密码的复杂性,以提升用户账号的安全性。

前提条件

密码复杂性校验需在配置文件 server_config.toml 中进行配置,操作前请确认已获取 server_config.toml 配置文件并拥有修改权限。

配置规则

server_config.toml 配置文件中, [auth] 部分用于设置与身份验证相关的配置,具体内容示例如下,用户可以在此处开启密码复杂度校验功能并自定义密码复杂度校验规则。

[auth]
enable_login_check = true
enable_auth_check = true

enable_password_complexity_check = true
password_min_length = 10
password_min_number_count = 1
password_min_lower_alphabet_count = 1
password_min_upper_alphabet_count = 1
password_min_special_chars_count = 1

参数说明

参数说明默认值
enable_password_complexity_check全局配置项,用于开启或关闭密码复杂度校验功能。当 enable_password_complexity_check=true 时,开启密码复杂度校验功能,ArcGraph 将在用户创建或修改密码时进行密码复杂度校验。默认此配置项为 enable_password_complexity_check=false,即关闭密码复杂度校验功能。
password_min_length设置密码的最小长度。默认为 0,表示密码长度没有下限。
password_min_number_count设置密码中至少包含的数字(“0~9”)数量。默认为 0,表示密码中可以没有数字。
password_min_lower_alphabet_count设置密码中至少包含的小写字符(“a~z”)数量。默认值为 0,表示密码中可以没有小写字母。
password_min_upper_alphabet_count设置密码中至少包含的大写字符(“A~Z”)数量。默认值为 0,表示密码中可以没有大写字母。
password_min_special_chars_count设置密码中至少包含的特殊字符(例如:“@”、“~”、“!”、“#”、“$”、“%”、“^”、“&”、“*”等)数量。默认值为 0,表示密码中可以没有特殊字符。

应用示例

  1. 打开 server_config.toml 文件,并查看 [auth] 信息。 server_config.toml 默认存放路径为 config/server_config.toml

  2. 配置密码复杂度校验规则,示例如下。

    [auth]
    enable_login_check = true
    enable_auth_check = true

    enable_password_complexity_check = true
    password_min_length = 10
    password_min_number_count = 1
    password_min_lower_alphabet_count = 1
    password_min_upper_alphabet_count = 1
    password_min_special_chars_count = 1
  3. 保存配置文件,以生效密码复杂性校验功能。
    说明:

    • 不对已存在的密码进行密码复杂性校验。
    • 如需修改配置,请保存修改后重启服务器,以生效配置。
  4. 登录 ArcGraph 图数据库,并创建用户密码。示例如下。
    示例 1

    #符合要求的密码
    >> create user user1 set password "Abcdabcd@1";
    start executing statement: create user user1 set password "Abcdabcd@1";
    +--------------------------------+
    | Successfully create user USER1 |
    +================================+
    +--------------------------------+

    示例 2

    #密码长度不足
    >> create user user1 set password "123456";
    start executing statement: create user user1 set password "123456";
    +-------------------------------------------------------------------------+
    | error |
    +=========================================================================+
    | Code: 9007, Password is weak. Expected password contains min length 10. |
    +-------------------------------------------------------------------------+

    示例 3

    #密码包含的数字不足
    >> create user user1 set password "abcdefghijk";
    start executing statement: create user user1 set password "abcdefghijk";
    +-------------------------------------------------------------------------+
    | error |
    +=========================================================================+
    | Code: 9007, Password is weak. Expected password contains min numbers 1. |
    +-------------------------------------------------------------------------+

    示例 4

    #密码包含的小写字符数不足
    >> create user user1 set password "ABCDABCDA1";
    start executing statement: create user user1 set password "ABCDABCDA1";
    +------------------------------------------------------------------------------------+
    | error |
    +====================================================================================+
    | Code: 9007, Password is weak. Expected password contains lower alphabet numbers 1. |
    +------------------------------------------------------------------------------------+

    示例 5

    # 密码包含的大写字符数不足
    >> create user user1 set password "abcdabcda1";
    start executing statement: create user user1 set password "abcdabcda1";
    +------------------------------------------------------------------------------------+
    | error |
    +====================================================================================+
    | Code: 9007, Password is weak. Expected password contains upper alphabet numbers 1. |
    +------------------------------------------------------------------------------------+

    示例 6

    # 密码包含的特殊字符数不足
    >> create user user1 set password "Abcdabcda1";
    start executing statement: create user user1 set password "Abcdabcda1";
    +---------------------------------------------------------------------------------------+
    | error |
    +=======================================================================================+
    | Code: 9007, Password is weak. Expected password contains min special chars numbers 1. |
    +---------------------------------------------------------------------------------------+