多图管理

更新时间:
复制 MD 格式

Lindorm 图引擎支持在同一实例下管理多个相互隔离的子图,并按子图维度对用户与角色进行权限管理。本文介绍子图管理、子图用户管理和子图角色管理的常用操作。

权限说明

权限类型

权限

含义

READ

读权限。查询数据时,要求用户对查询的图有读权限

WRITE

写权限。 控制台用户管理模块要同时赋予 READWRITE

ADMIN

GlobalADMIN 具有创建子图、创建账号、清理子图等功能。控制台用户管理模块要同时赋予 READ、WRITE、ADMIN

授权范围

  • GLOBAL:全局范围的授权与撤回。当用户被赋予全局范围的权限后,用户则拥有了对于整个图引擎内所有数据对象的对应操作权限。例如,全局的READ权限将允许用户查询任意子图。

  • 子图范围(database):数据库粒度的授权与撤回。当用户被赋予某个子图 (database),用户则拥有了对于该子图内部所有数据对象的对应操作权限。

多图概览

Lindorm 图引擎支持多图管理模式。在此模式下,一个 Lindorm Graph 实例可以承载多个逻辑上相互隔离的子图。每个子图拥有独立的 Schema 和数据,适用于多租户、多业务场景的数据隔离。

  • 全局ADMIN:比如初始化的ROOT账号,以及控制台账号授予全局的ADMIN或者本文grant接口授予的全局ADMIN

  • 角色:定义用户对特定子图的访问权限,如只读或读写。

前提条件

  1. 已成功开通 Lindorm 图引擎服务。

  2. 已根据网络环境配置访问白名单,确保您的客户端可以访问 Lindorm 实例。

快速入门:创建并授权一个只读用户

本节将引导您完成创建一个只读用户的完整流程。假设我们的目标是:为子图 default 创建一个名为 graphreader 的只读用户。

  1. (可选)创建新子图
    如果默认的 default 子图无法满足业务需求,您可以使用主账号创建一个新的子图。如果使用 default 图,可跳过此步骤。

  2. 创建用户
    使用主账号调用添加用户接口,创建一个名为 graphreader 的用户。

  3. 为用户授予角色
    使用全文ADMIN用户调用授权角色接口,授予 graphreader 用户对 default 子图的 READER角色。

至此,graphreader 用户便可以使用其凭证对 default 子图进行只读访问。


子图管理

创建子图

  • 请求地址:POST /db/add

  • 功能描述:创建一个新的子图。

  • 权限要求:仅全局ADMIN账号可调用。

  • 请求示例:

    curl -X POST 'http://{host}:{port}/db/add' \
      -H 'Content-Type: application/json' \
      -u 'root_user:root_password' \
      -d '{
        "db": "my_graph",
        "params": {}
      }'
    
  • 参数说明:

    字段

    类型

    必填

    描述

    db

    String

    子图名称。仅允许使用小写字母(a-z)、数字(0-9)和下划线(_)。注意:不允许使用 user 作为名称。

    params

    JSON

    用于子图的附加配置参数,以 JSON 对象形式提供。

  • 响应示例:

    {
      "status": "200 OK",
      "payload": {
        "result": true
      }
    }
    

查询子图列表

  • 请求地址:GET /db/listGET /db/list?db={dbName}

  • 功能描述:查询一个或所有子图的列表信息。

  • 权限要求:所有已认证的用户均可调用。

  • 请求示例:

    # 查询所有子图
    curl -X GET 'http://{host}:{port}/db/list' \
      -u 'root_user:root_password'
    
    # 查询指定子图
    curl -X GET 'http://{host}:{port}/db/list?db=my_graph' \
      -u 'root_user:root_password'
    
  • 参数说明:

    参数

    类型

    必填

    描述

    db

    String

    指定要查询的子图名称。如果留空,则返回当前实例下的所有子图。

  • 响应示例:

    {
      "status": "200 OK",
      "payload": [
        {
          "creationTime": 1670813317324,
          "dbName": "my_graph",
          "lastModified": 1670813317324,
          "params": "{}"
        },
        {
          "creationTime": 1670813326798,
          "dbName": "my_graph_02",
          "lastModified": 1670813326798,
          "params": "{}"
        }
      ]
    }
    

删除子图

  • 请求地址:GET /db/del

  • 功能描述:删除指定的子图及其包含的所有数据。

  • 权限要求:仅全局ADMIN账号可调用。

  • 请求示例:

    curl -X GET 'http://{host}:{port}/db/del?db=my_graph' \
      -u 'root_user:root_password'
    
    说明

    如果db传递为default,则会清库操作,但是default还会存在。如果传递了其他的schema,那么整个db都会删除掉。

  • 参数说明:

    参数

    类型

    必填

    描述

    db

    String

    要删除的子图的名称。

  • 响应示例:

    {
      "status": "200 OK",
      "payload": {
        "result": true
      }
    }
    

用户管理

重要

一个实例共用所有的账号和密码:删除用户、修改用户密码,会影响当前实例的所有引擎,请到控制台操作。

添加用户

  • 请求地址:GET /user/add?user={name}&password={pwd}

  • 功能描述:创建一个用于访问子图的用户。功能等同于在控制台用户管理页面创建一个用户。

  • 权限要求:仅全局ADMIN用户可调用。

  • 请求示例:

    curl -X GET 'http://{host}:{port}/user/add?user=sub_user_01&password=sub_pwd_01' \
      -u 'root_user:root_password'
    
  • 参数说明:

    参数

    类型

    必填

    描述

    user

    String

    新建用户的名称。

    password

    String

    用户的登录密码。

  • 响应示例:

    {
      "status": "200 OK",
      "payload": {
        "result": true
      }
    }
    

查询用户

  • 请求地址:GET /user/listGET /user/list?user={name}

  • 功能描述:查询一个或所有用户的信息及其角色分配情况。

  • 权限要求:仅全局ADMIN用户可调用。

  • 请求示例:

    # 查询所有用户
    curl -X GET 'http://{host}:{port}/user/list' \
      -u 'root_user:root_password'
    
    # 查询指定用户
    curl -X GET 'http://{host}:{port}/user/list?user=sub_user_01' \
      -u 'root_user:root_password'
    
  • 参数说明:

    参数

    类型

    必填

    描述

    user

    String

    指定要查询的用户名称。如果留空,则返回所有用户。

  • 响应示例:

    说明

    下面的 * 代表 全局。

    {
      "payload": [
        {
          "roles": {
            "test1": "WRITER",
            "test2": "WRITER",
            "test4": "WRITER"
          },
          "user": "test_user"
        },
        {
          "roles": {
            "*": "ADMIN"
          },
          "user": "root"
        },
        {
          "roles": {
            "*": "ADMIN"
          },
          "user": "test_user_admin"
        }
      ],
      "status": "200 OK"
    }

子图角色管理

授权角色

  • 请求地址:GET /role/grant?db={dbName}&user={name}&role={role}

  • 功能描述:为指定用户授予访问特定子图的角色权限。

  • 权限要求:全局ADMIN用户。

  • 请求示例:

    curl -X GET 'http://{host}:{port}/role/grant?db=my_graph&user=sub_user_01&role=WRITER' \
      -u 'root_user:root_password'
    
  • 参数说明:

    参数

    类型

    必填

    描述

    db

    String

    目标子图的名称。如果是 * 代表授予GLOBAL权限

    user

    String

    目标用户的名称。

    role

    String

    要授予的角色名称,必须为大写

    • READER:数据只读权限。仅能对已授权的子图执行读操作。

    • WRITER:数据读写权限。包含 READER 的所有权限,并额外拥有写权限。

    • ADMIN: 授予某个账号为全局ADMIN后,可创建子图、创建账号、清理子图等。( 通过控制台用户管理模块要同时授予READ、WRITE、ADMIN

  • 响应示例:

    {
      "status": "200 OK",
      "payload": {
        "result": true
      }
    }
    

回收角色

  • 请求地址:GET /role/revoke?db={dbName}&user={name}

  • 功能描述:回收指定用户在特定子图上的所有权限。

  • 权限要求:全局ADMIN用户

  • 请求示例:

    curl -X GET 'http://{host}:{port}/role/revoke?db=my_graph&user=sub_user_01' \
      -u 'root_user:root_password'
    
    说明

    不可回收自身 ADMIN 角色

  • 参数说明:

    参数

    类型

    必填

    描述

    db

    String

    目标子图的名称。

    user

    String

    目标用户的名称。

  • 响应示例:

    {
      "status": "200 OK",
      "payload": {
        "result": true
      }
    }
    

查询所有角色关系

  • 请求地址:GET /role/all

  • 功能描述:查询当前实例中所有“用户-子图-角色”的授权关系列表,用于权限审计。

  • 权限要求:全局ADMIN用户

  • 请求示例:

    curl -X GET 'http://{host}:{port}/role/all' \
      -u 'root_user:root_password'
    
  • 响应示例:

    {
      "payload": [
        {
          "dbName": "test1",
          "role": "WRITER",
          "user": "test_user"
        },
        {
          "dbName": "test2",
          "role": "WRITER",
          "user": "test_user"
        },
        {
          "dbName": "test3",
          "role": "WRITER",
          "user": "test_user"
        },
        {
          "dbName": "*",
          "role": "ADMIN",
          "user": "test_user_admin"
        },
        {
          "dbName": "*",
          "role": "ADMIN",
          "user": "root"
        }
      ],
      "status": "200 OK"
    }