文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

图数据库Nebula Graph访问控制实现原理是什么

2024-04-02 19:55

关注

这期内容当中小编将会给大家带来有关图数据库Nebula Graph访问控制实现原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

摘要:数据库权限管理对大家都很熟悉,然而怎么做好数据库权限管理呢?在本文中将详细介绍 Nebula Graph 的用户管理和权限管理。

数据库权限管理对大家来说都已经很熟悉了。Nebula Graph 本身是一个高性能的海量图数据库,数据库的安全问题更是数据库设计的重中之重。目前 Nebula Graph 已支持基于角色的权限控制功能。在这篇文章中将详细介绍 Nebula Graph 的用户管理和权限管理。

Nebula Graph 架构体系

图数据库Nebula Graph访问控制实现原理是什么

由上图可知,Nebula Graph的主体架构分为三部分:Computation Layer、Storage Layer 和 Meta Service。Console 、API 和 Web Service 被统称为 Client API。 账户数据和权限数据将被存储在 Meta Engine中,当Query Engine 启动后,将会初始 Meta Client,Query Engine 将通过 Meta Client 与 Meta Service 进行通信。

当用户通过 Client API 连接 Query Engine 时,Query Engine 会通过 Meta Client 查询 Meta Engine 的用户数据,并判断连接账户是否存在,以及密码是否正确。当验证通过后,连接创建成功,用户可以通过这个连接执行数据操作。当用户通过 Client API 发送操作指令后,Query Engine 首先对此指令做语法解析,识别操作类型,通过操作类型、用户角色等信息进行权限判断,如果权限无效,则直接在 Query Engine 阻挡操作,并返回错误信息至 Client API。 在整个权限检查的过程中,Nebula Graph 对 Meta data 进行了缓存,将在以下章节中介绍。

功能描述

在介绍功能之前,需要先描述一下 Nebula Graph 的逻辑结构:Nebula Graph 是一个支持多图空间(Space) 的图数据库,Space 中独立管理 Schema 和 Data,Space 和 Space 之间相互独立。另外,Nebula Graph 还提供了一系列高级命令用于全局管理 Cluster,Cluster 的操作命令和 Space 的操作命令将在下文中详细描述。

因此 Nebula Graph 的权限管理将会基于图空间(Space)角色(Role)操作(Operation) 三个维度进行。详细描述请看下列子章节。

角色划分

Nebula Graph 提供了五种操作角色,分别是 GOD、ADMIN、DBA、USER、GUEST,这五种操作角色基本覆盖了所有的数据安全控制的场景。一个登陆账户(Account)可以在不同的 Space 中拥有不同角色,但一个 Account 在同一个 Space 中只能拥有一种角色。角色讲解:

详细权限列表如下图所示:

OPERATIONGODADMINDBAUSERGUEST
Read SpaceYYYYY
Write SpaceY



Read SchemaYYYYY
Write SchemaYYY

Write UserY



Write RoleYY


Read DataYYYYY
Write DataYYYY
Special operationYYYYY

注 : Special Operation 为特殊操作,例如 SHOW SPACE,每个角色都可以执行,但其执行结果只显示 Account 权限内的结果。

数据库操作权限细分

基于上边的角色列表,不同的角色拥有不同的操作许可,详细如下:

OPERATIONSTATEMENTS
Read Space1. USE
2. DESCRIBE SPACE
Write Space1. CREATE SPACE  
2. DROP SPACE
3. CREATE SNAPSHOT
4. DROP SNAPSHOT
5. BALANCE
Read Schema1. DESCRIBE TAG
2. DESCRIBE EDGE
3. DESCRIBE TAG INDEX
4. DESCRIBE EDGE INDEX
Write Schema1. CREATE TAG
2. ALTER TAG
3. CREATE EDGE
4. ALTER EDGE
5. DROP TAG
6. DROP EDGE
7. CREATE TAG INDEX
8. CREATE EDGE INDEX
9. DROP TAG INDEX
10. DROP EDGE INDEX
Write User1. CREATE USER
2. DROP USER
3. ALTER USER
Write Role1. GRANT
2. REVOKE
Read Data1. GO
2. PIPE
3. LOOKUP
4. YIELD
5. ORDER BY
6. FETCH VERTEX
7. FETCH EDGE
8. FIND PATH
9. LIMIT
10. GROUP BY
11. RETURN
Write Data1. REBUILD TAG INDEX
2. REBUILD EDGE INDEX
3. INSERT VERTEX
4. UPDATE VERTEX
5. INSERT EDGE
6. UPDATE DEGE
7. DELETE VERTEX
8. DELETE EDGE
Special Operation1. SHOW,eg: SHOW SPACE、 SHOW ROLES
2. CHANGE PASSWORD

控制逻辑

图数据库Nebula Graph访问控制实现原理是什么

Nebula Graph 的用户管理和权限管理和大多数数据库的控制相似,基于 meta server,对图空间(Space)、角色(Role)、操作(Operation)三个层面进行权限管理,当 Client 连接 Nebula Graph Server 的时候,Nebula Graph Server 首先会验证登陆账户(Account)是否存在,并验证密码是否有效。

登录成功后,Nebula Graph Server 会为此连接初始 Session ID,并将 Session ID、用户信息、权限信息和 Space 信息一起加载到 Session 结构中。后续的每次操作将基于 Session 结构中的信息进行权限判断。直到用户主动退出连接或 session timeout,Session 销毁。另外,Meta Client 对权限信息进行了缓存,并根据设置的时间频率进行缓存同步,有效降低了用户连接的过程的时间耗费。

控制逻辑代码片段

Permission Check
bool PermissionCheck::permissionCheck(session::Session *session, Sentence* sentence) {
    auto kind = sentence->kind();
    switch (kind) {
        case Sentence::Kind::kUnknown : {
            return false;
        }
        case Sentence::Kind::kUse :
        case Sentence::Kind::kDescribeSpace : {
            
            return true;
        }
        ...
Permission Check Entry
Status SequentialExecutor::prepare() {
    for (auto i = 0U; i < sentences_->sentences_.size(); i++) {
        auto *sentence = sentences_->sentences_[i].get();
        auto executor = makeExecutor(sentence);
        if (FLAGS_enable_authorize) {
            auto *session = executor->ectx()->rctx()->session();
            
            if (!PermissionCheck::permissionCheck(session, sentence)) {
                return Status::PermissionError("Permission denied");
            }
        }
   ...
}

示例

查看现有用户角色

(root@127.0.0.1:6999) [(none)]> SHOW USERS;
===========
| Account |
===========
| root    |
-----------
Got 1 rows (Time spent: 426.351/433.756 ms)

创建用户

(root@127.0.0.1:6999) [(none)]> CREATE USER user1 WITH PASSWORD "pwd1"
Execution succeeded (Time spent: 194.471/201.007 ms)
(root@127.0.0.1:6999) [(none)]> CREATE USER user2 WITH PASSWORD "pwd2"
Execution succeeded (Time spent: 33.627/40.084 ms)
# 查看现有用户角色
(root@127.0.0.1:6999) [(none)]> SHOW USERS;
===========
| Account |
===========
| root    |
-----------
| user1   |
-----------
| user2   |
-----------
Got 3 rows (Time spent: 24.415/32.173 ms)

为 Space 中的不同 Account 指定角色

# 创建图空间
(root@127.0.0.1:6999) [(none)]> CREATE SPACE user_space(partition_num=1, replica_factor=1)
Execution succeeded (Time spent: 218.846/225.075 ms)
(root@127.0.0.1:6999) [(none)]> GRANT DBA ON user_space TO user1
Execution succeeded (Time spent: 203.922/210.957 ms)
(root@127.0.0.1:6999) [(none)]> GRANT ADMIN ON user_space TO user2
Execution succeeded (Time spent: 36.384/49.296 ms)

查看特定 Space 的已有角色

(root@127.0.0.1:6999) [(none)]> SHOW ROLES IN user_space
=======================
| Account | Role Type |
=======================
| user1   | DBA       |
-----------------------
| user2   | ADMIN     |
-----------------------
Got 2 rows (Time spent: 18.637/29.91 ms)

取消特定 Space 的角色授权

(root@127.0.0.1:6999) [(none)]> REVOKE ROLE DBA ON user_space FROM user1
Execution succeeded (Time spent: 201.924/216.232 ms)
# 查看取消之后,user_space 现有角色
(root@127.0.0.1:6999) [(none)]> SHOW ROLES IN user_space
=======================
| Account | Role Type |
=======================
| user2   | ADMIN     |
-----------------------
Got 1 rows (Time spent: 16.645/32.784 ms)

删除某个 Account 角色

(root@127.0.0.1:6999) [(none)]> DROP USER user2
Execution succeeded (Time spent: 203.396/216.346 ms)
# 查看 user2 在 user_space 的角色
(root@127.0.0.1:6999) [(none)]> SHOW ROLES IN user_space
Empty set (Time spent: 20.614/34.905 ms)
# 查看数据库现有 account
(root@127.0.0.1:6999) [(none)]> SHOW USERS;
===========
| Account |
===========
| root    |
-----------
| user1   |
-----------
Got 2 rows (Time spent: 22.692/38.138 ms)

上述就是小编为大家分享的图数据库Nebula Graph访问控制实现原理是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯