iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >图数据库Nebula Graph访问控制实现原理是什么
  • 779
分享到

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

2024-04-02 19:04:59 779人浏览 独家记忆
摘要

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

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

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

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

Nebula Graph 架构体系

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

由上图可知,Nebula Graph的主体架构分为三部分:Computation Layer、Storage Layer 和 Meta Service。Console 、apiWEB 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 中只能拥有一种角色。角色讲解:

  • GOD:相当于 linux 操作系统中的 root 用户,拥有最高的管理权限。Nebula Graph Cluster 在初始化时会默认创建一个 GOD 角色的 Account,名为 root。

  • ADMIN:基于 Space 的高级管理员,拥有此 Space 之内的所有管理权限,但对整个集群则没有管理权限

  • DBA:数据库管理员,可以对权限内的 Space 进行管理,例如对 Schema / Data 进行修改和查询。和 ADMIN 的区别是 DBA 不能对某个 Account 进行授权操作,但 ADMIN 可以

  • USER:普通的数据库使用角色。可读写 Data,可读 Schema 但没有写权限

  • GUEST:访问者角色,对权限内 Space 的 Schema 和 Data 有只读权限

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

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访问控制实现原理是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 图数据库Nebula Graph访问控制实现原理是什么

本文链接: https://www.lsjlt.com/news/69974.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 图数据库Nebula Graph访问控制实现原理是什么
    这期内容当中小编将会给大家带来有关图数据库Nebula Graph访问控制实现原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。摘要:数据库权限管理对大家都很熟悉,...
    99+
    2024-04-02
  • MySQL数据库中访问控制的实现原理是什么
    本篇文章为大家展示了MySQL数据库中访问控制的实现原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。MySQL 访问控制实际上由两个功能模块共同组成,一个是...
    99+
    2024-04-02
  • 怎么实现分布式图数据库Nebula Graph 的Index实践
    这篇文章将为大家详细讲解有关怎么实现分布式图数据库Nebula Graph 的Index实践,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。导读索引是数据库系...
    99+
    2024-04-02
  • 分布式图数据库 Nebula Graph 中的集群快照实践是怎样进行的
    今天就跟大家聊聊有关分布式图数据库 Nebula Graph 中的集群快照实践是怎样进行的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.1 需求...
    99+
    2024-04-02
  • 怎么进行图数据库 Nebula Graph 的代码变更测试覆盖率实践
    这期内容当中小编将会给大家带来有关怎么进行图数据库 Nebula Graph 的代码变更测试覆盖率实践,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。对于一个持续开发的大型...
    99+
    2024-04-02
  • PostgreSQL数据库实现原理是什么
    这篇文章主要讲解了“PostgreSQL数据库实现原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PostgreSQL数据库实现原理是什么”吧!Po...
    99+
    2024-04-02
  • Nebula Graph在大规模数据量级下的实践和定制化开发是怎么样的
    这篇文章将为大家详细讲解有关Nebula Graph在大规模数据量级下的实践和定制化开发是怎么样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。图数据在社交...
    99+
    2024-04-02
  • 数据库事务的实现原理是什么
    本篇内容主要讲解“数据库事务的实现原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据库事务的实现原理是什么”吧!数据库的事务有四大特性:原子性、隔离性...
    99+
    2024-04-02
  • 数据库内存共享实现原理是什么
    这篇文章主要讲解了“数据库内存共享实现原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库内存共享实现原理是什么”吧!共享内存是进程间通讯的一种方...
    99+
    2024-04-02
  • Aurora数据库中怎么管理用户权限和访问控制
    Aurora数据库使用IAM来管理用户权限和访问控制。您可以通过IAM控制台创建IAM用户、角色和策略,然后将这些IAM实体与Aur...
    99+
    2024-04-09
    Aurora
  • kubernetes控制器StatefulSet核心实现原理是什么
    本篇内容主要讲解“kubernetes控制器StatefulSet核心实现原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“kubernetes控制器St...
    99+
    2024-04-02
  • 如何在Couchbase中实现数据访问控制和权限管理
    在Couchbase中实现数据访问控制和权限管理可以通过以下几种方式: 使用RBAC(基于角色的访问控制):Couchbase支...
    99+
    2024-04-09
    Couchbase
  • 数据堡垒的守护者:数据库访问控制的最佳实践
    数据库访问控制的原则 DAC 的核心原则是限制用户仅访问他们执行工作职责所需的数据。这可以通过以下原则实现: 最小权限原则:用户只应授予完成其工作职责所需的最低权限。 分离职责原则:不同的职责应分配给不同的用户,以防止未经授权的访问。...
    99+
    2024-02-16
    数据库访问控制 数据库安全 数据保护 RBAC ABAC
  • 如何在Amazon Aurora中管理数据库权限和访问控制
    在Amazon Aurora中,可以使用以下方法来管理数据库权限和访问控制: IAM 角色:可以通过 IAM(Identity ...
    99+
    2024-04-02
  • 数据库访问控制:现代数据安全格局中的关键因素
    随着数字化转型加速,企业面临着前所未有的数据安全挑战。数据访问控制已成为现代数据安全格局中的关键因素,对于保护敏感数据免遭未经授权的访问至关重要。 数据访问控制的类型 数据访问控制机制有多种类型,包括: 基于角色的访问控制 (RBAC)...
    99+
    2024-04-02
  • java访问数据库的步骤是什么
    访问数据库的步骤通常如下:1. 加载数据库驱动程序:使用`Class.forName()`方法加载相应的数据库驱动程序。2. 建立数...
    99+
    2023-08-15
    java 数据库
  • jdbc访问数据库的步骤是什么
    JDBC(Java Database Connectivity)是一种用于在Java应用程序中访问数据库的API。JDBC访问数据库...
    99+
    2023-08-11
    jdbc 数据库
  • 数据库访问优化法则是什么
    本篇文章为大家展示了数据库访问优化法则是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  在网上有很多文章介绍数据库优化知识,但是大部份文章只是对某个一个方面进...
    99+
    2024-04-02
  • DM7数据复制中数据库级复制的原理及用法是什么
    DM7数据复制中数据库级复制的原理及用法是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。DM 的数据复制可以在表级,模式级和库级进行配置,...
    99+
    2024-04-02
  • Spring访问数据库异常的处理方法是什么
    Spring访问数据库异常的处理方法是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。使用JDBC API时,很多操作都要声明抛出java.sql.SQLExceptio...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作