Lindorm 图引擎支持在同一实例下管理多个相互隔离的子图,并按子图维度对用户与角色进行权限管理。本文介绍子图管理、子图用户管理和子图角色管理的常用操作。
多图概览
Lindorm 图引擎支持多图管理模式。在此模式下,一个 Lindorm Graph 实例可以承载多个逻辑上相互隔离的子图。每个子图拥有独立的 Schema 和数据,适用于多租户、多业务场景的数据隔离。
主账号:通过阿里云控制台创建的初始账号,拥有实例的最高管理权限,负责子图和子用户的创建与管理。
子用户:由主账号通过 API 创建的、用于访问具体子图的用户。
角色:定义子用户对特定子图的访问权限,如只读或读写。
前提条件
已成功开通 Lindorm 图引擎服务。
已根据网络环境配置访问白名单,确保您的客户端可以访问 Lindorm 实例。
快速入门:创建并授权一个只读用户
本节将引导您完成创建一个只读子用户的完整流程。假设我们的目标是:为子图 default 创建一个名为 graphreader 的只读用户。
(可选)创建新子图
如果默认的default子图无法满足业务需求,您可以使用主账号创建一个新的子图。如果使用default图,可跳过此步骤。创建子图用户
使用主账号调用添加子图用户接口,创建一个名为graphreader的子用户。为子用户授予角色
使用主账号调用授权角色接口,授予graphreader用户对default子图的READER角色。
至此,graphreader 用户便可以使用其凭证对 default 子图进行只读访问。
子图管理
创建子图
请求地址:
POST /db/add功能描述:创建一个新的子图。
权限要求:仅主账号可调用。
请求示例:
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/list或GET /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功能描述:删除指定的子图及其包含的所有数据。
权限要求:仅主账号(
root_user)可调用。请求示例:
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}功能描述:创建一个用于访问子图的子用户。
权限要求:仅主账号可调用。
请求示例:
curl -X GET 'http://{host}:{port}/user/add?user=sub_user_01&password=sub_pwd_01&comment=subTest_01' \ -u 'root_user:root_password'参数说明:
参数
类型
必填
描述
user
String
是
新建子用户的名称。
password
String
是
子用户的登录密码。
comment
String
否
对该用户的备注信息。
响应示例:
{ "status": "200 OK", "payload": { "result": true } }
查询子图用户
请求地址:
GET /user/list或GET /user/list?user={name}功能描述:查询一个或所有子用户的信息及其角色分配情况。
权限要求:仅主账号可调用。
请求示例:
# 查询所有子用户 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
否
指定要查询的子用户名称。如果留空,则返回所有子用户。
响应示例:
{ "status": "200 OK", "payload": [ { "comment": "subTest_01", "creationTime": 1668069383040, "lastModified": 1668069383040, "roles": { "my_graph": "ADMIN", "my_graph_02": "WRITER" }, "user": "sub_user_01" }, { "comment": "subTest_02", "creationTime": 1668079691673, "lastModified": 1668079691673, "roles": {}, "user": "sub_user_02" } ] }
删除子图用户
请求地址:
GET /user/del?user={name}功能描述:删除一个已存在的子用户。
权限要求:仅主账号可调用。
请求示例:
curl -X GET 'http://{host}:{port}/user/del?user=sub_user_01' \ -u 'root_user:root_password'参数说明:
参数
类型
必填
描述
user
String
是
要删除的子用户的名称。
响应示例:
{ "status": "200 OK", "payload": { "result": true } }
更新子图用户
请求地址:
GET /user/update?user={name}功能描述:更新子用户的密码或备注信息。
权限要求:仅主账号可调用。
请求示例:
# 更新密码和备注 curl -X GET 'http://{host}:{port}/user/update?user=sub_user_01&password=new_pwd&comment=new_comment' \ -u 'root_user:root_password'参数说明:
参数
类型
必填
描述
user
String
是
要更新的子用户的名称。
password
String
否
子用户的新密码。
comment
String
否
子用户的新备注信息。
响应示例:
{ "status": "200 OK", "payload": { "result": true } }
子图角色管理
授权角色
请求地址:
GET /role/grant?db={dbName}&user={name}&role={role}功能描述:为指定用户授予访问特定子图的角色权限。
权限要求:主账号或拥有
WRITEROLE权限的用户可调用。请求示例:
curl -X GET 'http://{host}:{port}/role/grant?db=my_graph&user=sub_user_01&role=WRITER' \ -u 'root_user:root_password'参数说明:
参数
类型
必填
描述
db
String
是
目标子图的名称。
user
String
是
目标用户的名称。
role
String
是
要授予的角色名称,必须为大写
READER:数据只读权限。仅能对已授权的子图执行读操作。WRITER:数据读写权限。包含READER的所有权限,并额外拥有写权限。
响应示例:
{ "status": "200 OK", "payload": { "result": true } }
回收角色
请求地址:
GET /role/revoke?db={dbName}&user={name}功能描述:回收指定用户在特定子图上的所有权限。
权限要求:主账号或拥有
WRITEROLE权限的用户可调用。请求示例:
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功能描述:查询当前实例中所有“用户-子图-角色”的授权关系列表,用于权限审计。
权限要求:仅主账号可调用。
请求示例:
curl -X GET 'http://{host}:{port}/role/all' \ -u 'root_user:root_password'响应示例:
{ "status": "200 OK", "payload": [ { "creationTime": 1668133597539, "dbName": "my_graph", "lastModified": 1668133597539, "role": "ADMIN", "user": "sub_user_01" }, { "creationTime": 1668133583866, "dbName": "my_graph_02", "lastModified": 1668133583866, "role": "ADMIN", "user": "sub_user_02" }, { "creationTime": 1668133601893, "dbName": "my_graph_03", "lastModified": 1668133601893, "role": "WRITER", "user": "sub_user_03" } ] }