CN115277242A - 一种数字对象的访问控制方法及装置 - Google Patents
一种数字对象的访问控制方法及装置 Download PDFInfo
- Publication number
- CN115277242A CN115277242A CN202210930802.7A CN202210930802A CN115277242A CN 115277242 A CN115277242 A CN 115277242A CN 202210930802 A CN202210930802 A CN 202210930802A CN 115277242 A CN115277242 A CN 115277242A
- Authority
- CN
- China
- Prior art keywords
- data
- identity
- authority
- identity data
- block chain
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/10—Network architectures or network communication protocols for network security for controlling access to devices or network resources
- H04L63/105—Multiple levels of security
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0643—Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Power Engineering (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供了一种数字对象访问控制方法及装置,本发明首先接收客户端发送的针对数字对象的操作请求;然后根据所述操作请求,获取身份标识;根据所述身份标识,从所述区块链本地存储的摘要列表中获取所述身份标识对应的目标摘要值;所述摘要列表已在所述区块链节点所属区块链中共识;根据所述目标摘要值,从分布式存储网络服务端中获取对应的目标身份数据;根据所述身份数据与所述区块链本地存储的权限策略数据,确定所述操作请求的权限;所述权限策略数据已在所述区块链节点所属区块链中共识;最后根据所述权限,对所述操作请求进行处理。本发明实施例提供的数字对象访问控制方法,在大数据场景下,既可以满足区块链数据的一致性,又可以降低全网存储的开销,方便研发机构之间对于海量数据的维护和管理。
Description
技术领域
本申请涉及区块链技术领域,具体涉及一种数字对象访问控制方法及装置。
背景技术
区块链作为时代的新兴技术,由于其去中心化、匿名化等特性,对经济社会发展和国家治理体系现代化等具有不可替代的重要性。而我国主要推广无币的联盟链。
在先前技术中,研发机构使用区块链时,需要将权限控制需要的信息在全节点进行全量数据存储,所有节点都存储权限控制需要的全部身份信息。
在用户数量增多,数据增多的情况下,权限表变得很长,所有节点都存储权限控制需要的全部身份信息会造成资源的浪费,且海量数据的维护和管理对于研发机构而言都十分不方便。
发明内容
为克服相关技术中存在的问题,本发明提供一种数字对象访问控制方法及装置,可以克服或者部分解决上述问题。
为了解决上述技术问题,本发明是这样实现的:
第一方面,本发明实施例提供了一种数字对象访问控制方法,应用于区块链节点,所述方法包括:
接收客户端发送的针对数字对象的操作请求;
根据所述操作请求,获取身份标识;
根据所述身份标识,从所述区块链本地存储的摘要列表中获取所述身份标识对应的目标摘要值;所述摘要列表已在所述区块链节点所属区块链中共识;
根据所述目标摘要值,从分布式存储网络服务端中获取对应的目标身份数据;
根据所述身份数据与所述区块链本地存储的权限策略数据,确定所述操作请求的权限;所述权限策略数据已在所述区块链节点所属区块链中共识;
根据所述权限,对所述操作请求进行处理。
可选地,所述操作请求包括:
访问请求、存储请求、检索请求、修改请求、针对任一数字对象的权限更改请求中至少一种。
可选地,所述方法还包括:
获取身份数据以及权限策略数据;
将所述身份数据发送至存储服务端进行存储,并接收所述存储服务端返回的摘要值,并建立所述身份数据对应的身份标识和所述摘要值;
将所述身份数据对应的身份标识和所述摘要值在所述区块链中进行共识以在所述区块链中全局存储摘要列表,以及将所述权限策略数据在所述区块链中进行共识以在所述区块链中全局存储权限策略数据;
根据所述身份数据和所述区块链中存储的权限策略数据,确定所述操作请求的操作权限。
可选地,所述身份数据包括身份标识和用户角色,所述权限策略数据包括:对不同的角色设定有至少部分不同的第一权限规则数据;所述根据所述身份数据和所述区块链中存储的权限策略数据,确定所述操作请求的操作权限,包括:
根据所述第一权限规则数据,确定所述用户角色所具有的权限范围是否涵盖所述操作权限。
可选地,所述权限策略数据中还包括:基于权限判断参数的第二权限规则数据,所述根据所述身份数据和所述区块链中存储的权限策略数据,确定所述操作请求的操作权限,还包括:
调用外置函数,获取所述用户标识对应的目标权限判断参数;
根据所述第二权限规则数据和权限判断参数,判断所述用户标识是否具有所述操作权限。
可选地,所述根据所述目标摘要值,从分布式存储网络服务端中获取对应的目标身份数据,包括:
在缓存哈希表的键中查询所述摘要值;
在所述缓存哈希表的键存在所述摘要值的情况下,根据所述键对应的值,确定双向链表中的目标节点;
从所述目标节点中读取所述摘要值对应的身份数据,并将所述目标节点移动到所述双向链表的头指针之后。
可选地,所述方法还包括:
在所述缓存哈希表的键不存在所述摘要值的情况下,在所述分布式存储网络服务端查询所述摘要值对应的身份数据;
在查询到所述摘要值对应的身份数据后,在双向链表中创建新的节点;
将所述身份数据存入所述新的节点,并所述将所述新的节点移动到所述双向链表的头指针之后。
可选地,所述在双向链表中创建新的节点之前,还包括:
在确定所述双向链表的记录数达到上限的情况下,删除所述双向链表的尾指针指向的节点。
可选地,所述在所述缓存哈希表的键不存在所述摘要值的情况下,在所述分布式存储网络服务端查询所述摘要值对应的身份数据,还包括:
在查询到的身份数据为至少一个身份数据块的情况下,将所述至少一个身份数据块进行拼接,获得拼接数据;
移除所述拼接数据中的占位符,获得最终的身份数据。
可选地,所述根据所述目标摘要值,从分布式存储网络服务端中获取对应的目标身份数据之后,还包括:
根据所述身份数据,计算对应的校验摘要值;
将所述校验摘要值和所述目标摘要值进行对比,确定所述身份数据的真实性;
在所述身份数据真实的情况下,执行根据所述身份数据和所述区块链中存储的权限策略数据,确定所述访问请求的操作权限的步骤;
在所述身份数据不真实的情况下,向客户端发送身份不真实的校验结果。
第二方面,本发明实施例提供了一种数字对象访问控制装置,其特征在于,应用于区块链节点,所述方法包括:
操作请求接收模块,用于接收客户端发送的针对数字对象的操作请求;
身份标识获取模块,用于根据所述操作请求,获取身份标识;
摘要值获取模块,用于根据所述身份标识,从所述区块链本地存储的摘要列表中获取所述身份标识对应的目标摘要值;所述摘要列表已在所述区块链节点所属区块链中共识;
身份数据获取模块,用于根据所述目标摘要值,从分布式存储网络服务端中获取对应的目标身份数据;
权限认证模块,用于根据所述身份数据与所述区块链本地存储的权限策略数据,确定所述操作请求的权限;所述权限策略数据已在所述区块链节点所属区块链中共识;
操作请求处理模块,用于根据所述权限,对所述操作请求进行处理。
本发明所述方法将进行权限控制需要的信息解耦为权限策略数据和身份数据,将修改频率很低的权限策略数据存入系统单链,将经常被修改的且数据量较大的身份数据存于分布式存储网络,并通过分布式存储网络计算得到身份数据的摘要,将身份摘要存入系统单链,最后同步系统单链上的数据,既满足了区块链数据的一致性,又节约存储空间。相较于在先技术将权限控制需要的信息在全节点进行全量数据备份,本发明实施例将身份摘要存入系统单链,可以满足区块链数据的一致性;将大数据区块链系统中的身份信息分片存于分布式存储网络,而不是存于系统链上,系统链上存储的是身份数据的摘要值而不包括身份数据的具体内容,因此,在区块链的区块链节点上存储的跟权限相关的列表中的数据少,可以降低全网存储的开销。该种存储方式,在大数据的场景下,用户数量庞大,使用该种方式可以大大减小区块链的节点的存储量,降低对区块链节点的存储要求,方便新型研究机构对海量数据的维护和管理。
本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种数字对象访问控制方法的流程示意图;
图2是本发明实施例提供的一种区块链系统的技术架构图;
图3是本发明实施例提供的一种区块链系统的系统链与多账本架构图;
图4是本发明实施例提供的一种区块链的权限数据存储方法图;
图5是本发明实施例提供的一种区块链节点共识流程图;
图6是本发明实施例提供的一种分布式存储网络的数据组织结构图;
图7是本发明实施例提供的一种区块链中身份数据的存储流程图;
图8是本发明实施例提供的一种区块链中身份数据的修改流程图;
图9是本发明实施例提供的一种缓存哈希表和双向链表的关系图;
图10是本发明实施例提供的一种区块链中身份数据的查询流程图;
图11是本发明实施例提供的一种区块链中身份数据的拼接示意图;
图12是本发明实施例提供的一种操作请求处理的示意图;
图13是本发明实施例提供的一种区块链中权限策略数据的结构图;
图14是本发明实施例提供的一种区块链权限机制系统UML图;
图15是本发明实施例提供的一种数字对象访问控制装置的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
在本申请实施例中,首先介绍区块链技术相关基础:
参照图2,其示出了本申请实施例的一种区块链的技术架构示意图。具体可以包括:
数据资源层、资源状态层、资源协同层、编程框架层、数据治理层、数据智能层;在这些层之上,设置有多种平台,比如数据智能可信共享交换平台、数据智能可信开放应用平台、数据智能可信流通交易平台、城市数据智能可信平台、工业数据智能可信平台等。在这些平台上,可以设置相关的应用程序,比如数字应用、智慧程序应用、数字社会应用、工业互联网应用等。
该区块链可以包括:各种数据资源、数据智能可信操作系统、数据智能应用支撑平台、领域特定应用平台和智能应用。该区块链系统可以用于实现数据全生命周期过程监督,数据采集、预处理、分析等过程。
区块链系统的技术架构从下到上的逻辑层次分别为数据资源层、资源状态层、资源协同层、编程框架层。资源状态层包含图结构分布式账本、非全网随机共识和层次化存储调度机制,其中,图结构分布式账本是BDLedger,BDLedger是一个多账本区块链系统,可以根据业务需求运行多套账本;BDLedger采用一种可扩展的DAG账本结构(Direct AcyclicGraph,有向无环图)与其特有的随机见证共识相结合,可以做到系统的交易吞吐量随着节点的增加而线性增加。所述交易吞吐量指单位时间能够完成交易的最高数量。
其中,图3是本发明实施例提供的一种区块链系统的系统链与多账本架构图。参照图3可知,本发明实施例提供的一种区块链系统包括单链结构的系统链和多账本结构的DAG账本。
区块链系统通常需要系统级别的逻辑层来进行全网级别的调控和全网知识的共识,因此系统链采用通过哈希指针连接的区块构成的单链结构来存储和强共识一些全局知识,系统链也可以被称作系统单链。
特别的,系统单链采用可拔插且不会导致分叉的共识机制,例如:PBFT(PracticalByzantine Fault Tolerance,实用拜占庭容错算法)和分布式一致性算法。
PBFT(Practical Byzantine Fault Tolerance)即实用拜占庭容错算法,该算法通常划分有三种角色:客户端节点、主节点和副本节点。客户端节点负责发送交易请求;主节点负责将交易打包成区块和区块共识,每轮共识过程有且仅有一个主节点;副本节点则负责区块共识部分。PBFT算法的基本流程主要有以下四个步骤:
1、客户端发送请求给主节点;
2、主节点广播请求给其他节点,节点执行PBFT算法的三阶段共识流程;
3、节点处理完所述流程后,返回消息给客户端;
4、客户端收到来自f+1个节点的相同消息后,代表共识已经正确完成。
其中,f为故障节点的数量。
分布式一致性算法,该算法通常将系统中的角色划分为领导者、跟随者和候选人。领导者负责接收客户端的请求,并向跟随者同步请求日志;跟随者负责接收并持久化领导者同步的日志;候选者是选举过程的临时角色。该算法通过选举一个领导者,然后给予他全部的管理复制日志的责任来实现一致性。领导者节点从客户端接收日志条目,复制到跟随者节点并在安全的时候执行;如果领导者节点故障,则重新选举出领导者。
需要说明的是,在本发明实施例中,系统单链主要储存两方面的知识:权限信息,包括区块链网络系统级别和账本级别的权限信息;全局节点列表、随机数种子等信息,包括网络的节点与身份信息。
为了实现在大数据场景下更快速地检索以及更快速地进行数据的存证,本发明实施例采用有较强的扩展性的DAG账本。DAG账本的区块结构由区块头和区块体构成,区块体是交易的集合,区块头携带有相关的信息。所述DAG账本的交易(事务)的数据结构,见下方表1,包括交易类型、发送方地址、交易Nonce值、接收方地址、交易/存证数据、交易附带信息、交易签名。其中,交易类型包含系统级交易、普通交易、合约相关交易三种。
表1 DAG账本数据结构
而DAG账本的区块头的数据结构如下表2所示,一个区块头包含产块者地址、产块时间、父区块哈希、交易默克尔树根、区块包含的事务数量、区块附带信息、区块签名构成。特别的,父区块哈希是一个数组,因此一个区块拥有多个父区块。对于随机见证共识,区块附带信息中存储有见证者节点的签名。
表2 DAG账本区块头的数据结构
然后,具体介绍本申请实施例的一种数字对象访问控制方法。
参照图1,其示出了本申请实施例的一种数字对象访问控制方法的流程示意图,应用于区块链节点,所述方法包括:
步骤101,接收客户端发送的针对数字对象的操作请求。
在本申请实施例中,本申请的区块链节点可以服务于研发机构、各种企事业单位的区块链的区块链节点。所述数字对象可以是各种文件以及各种数字信息。上述研发机构等单位可以在区块链中存储数字对象,然后还可以对已经存到区块链中的数据对象进行读取、检索或者修改等操作。因此上述操作请求可以包括写入数字对象的操作请求,读取数字对象的操作请求,修改数字对象的操作请求,检索数字对象的操作请求等。
所述操作请求是请求操作的信息载体,采用JSON作为其数据格式,可以表达丰富的数据结构,便于转换为其他数据格式,易于阅读,易于机器解析和生成。所述操作请求包含有发送客户端的身份信息以及客户端针对数字对象想要进行的操作。
在本申请实施例中,可以预先在区块链中全链存储身份数据的摘要值以及全链存储权限策略数据。在存储上述摘要值时,以该身份数据的身份标识和所述摘要值直接的关联关系进行存储。
具体的权限存储和修改过程参照后续相关步骤的描述。
步骤102,根据所述操作请求,获取身份标识。
所述操作请求中包含有所述客户端的身份标识;所述目标身份标识即发起所述操作请求的客户端的唯一身份标识,可以反映其身份或角色。
如前述步骤描述,区块链是将用户的身份标识和全局摘要值对应进行存储。那么后续,客户端发送操作请求时,携带特有的目标身份标识,本发明实施例则可以从操作请求中提取该目标身份标识。
在实际应用中,客户端发起的事务或者说请求,都会携带pubkey字段,而pubkey字段中记录的是身份标识。那么对于区块链节点而言,收到该事务或者请求后,从pubkey字段中提取身份标识,然后即可通过区块链存储的上述直接的关联关系,提取该身份标识对应的全局摘要值,然后基于全局摘要值在IPFS网络中提取身份数据,最后基于该身份数据进行验证。
步骤103,根据所述身份标识,从所述区块链本地存储的摘要列表中获取所述身份标识对应的目标摘要值;所述摘要列表已在所述区块链节点所属区块链中共识。
所述目标摘要值即发起所述处理请求的客户端的身份数据摘要值,因为所述身份数据摘要值和身份标识的对应关联关系,根据所述目标身份标识可以得到客户端的目标摘要值。
所述摘要列表存储有一定数量的最近发起操作请求的客户端的身份数据的摘要值。所述摘要列表的大小是预先设定的,可以自行设定。
步骤104,根据所述目标摘要值,从分布式存储网络服务端中获取对应的目标身份数据。
所述分布式存储网络服务端可以是基于内容寻址的IPFS分布式存储网络(InterPlanetary File System,星际文件系统)。因为IPFS分布式存储网络针对身份数据生成唯一特有的身份数据摘要,所以根据唯一特有的所述目标摘要可以从IPFS分布式存储网络获取对应的目标身份数据。
步骤105,根据所述身份数据与所述区块链本地存储的权限策略数据,确定所述操作请求的权限;所述权限策略数据已在所述区块链节点所属区块链中共识。
所述权限策略数据,可以理解为用于进行权限判断的各种数据,权限策略数据可以是本发明实施例的策略语言,该策略语言可以是一种脚本语言,参见图13,具体可以包括两部分:一是和权限控制有关的代码,通常由若干个命名的子策略代码块组成,其中定义了变量数值操作与逻辑判断等相关的代码,针对成员或节点的请求进行权限判断,返回结果是True或者False;二是与修改身份信息有关的代码,可通过UpdateData方法更新身份数据,并且通过内置函数将修改后的结果进行返回,这样不仅对修改身份信息的操作进行了合法性判断,并将修改后一致性的结果进行了返回。对于修改身份信息的操作返回结果一般是修改后的字符串。
其中,所述UpdateData方法会首先调用user_is_granted方法对用户的操作合法性进行判断,如果通过,则使用内置函数对身份数据进行修改,并通过newdata变量进行返回,这样不仅对操作的合法性进行了判断,也对最终的结果一致性达成了共识。有关Updatedata方法的操作示例如下:
在本申请实施例中,所述身份数据,可以理解为表示用户身份相关的各种数据。比如身份数据可以包括:身份标识、角色等。特别的,身份数据用JSON数据进行表示,可以表达更丰富的层级关系。
本发明实施例所述身份数据储存了与存储无关的成员和节点的信息,最主要的功能就是体现成员的职能,例如写入账本、参与共识、赋予他人权限等。在身份数据中,通常在grants下定义相应角色的职能;其中,斜杠/是分隔符,用于显示身份数据的层级关系;*是通配符,通过通配符*可以赋予用户修改身份信息的权限。
例如:“roles/*/Writer”,表示拥有该权限的成员能够赋予任何角色Writer的权限,即Writer的用户可以将Writer的角色权限赋予给任何人;“grants/Writer/writeledger”表示可以赋予Writer角色writeledger的权限。有关身份数据的示例如下:
身份数据的表现形式还可以包括:黑白名单和角色身份信息。
黑白名单主要用于基本的访问控制,即简单通过列表进行权限的识别,主要用于判断成员或者节点是否有加入网络和创建账本的权限,一个规范的黑白名单的身份信息实现主要包括三个部分:
1)黑白名单详情:记录黑白名单中具体的节点情况,具体的示例如下表所示,在以list为键的结构中分别有white和black两个节点列表,列表中每一个节点以地址作为键,节点详情作为值,其中可以填入节点备注之类的信息以方便扩展。下面是黑白名单的示例:
2)角色详情:记录当前系统存在的成员及其角色详情,其示例如下alice拥有Admin 权限,bob拥有Modifier权限的角色详情示例:
3)角色职能:记录黑白名单中相应角色所拥有的具体权限职能,如下表角色职能示例所示,Admin可以添加用户,赋予用户Admin和Modifier权限;Modifier可以添加或删除黑白名单中的节点,不能赋予其他用户角色:
角色身份信息是另一种常用的身份信息类型,策略语言也可通过data关键字进行直接引用身份信息中的键值对,如下身份信息使用示例:
对于黑白名单数据,可以由具有相关权限的管理员在系统初始化的时候设置,然后在区块链中维护一个黑白名单表,该黑白名单表中存储的为用户身份数据的摘要值。后续具有权限的相关账户可以通过发起事务更新的方式,对黑白名单进行更新,在更新请求中将黑白名单下,分别写入待加入的用户的身份数据;区块链节点收到该更新请求后,确定该账户具有更新权限的情况下,可以将更新请求中的黑白名单中的身份数据存入 IPFS,然后将IPFS返回的摘要值替换到黑白名单中,然后将替换了摘要值的黑白名单以共识算法更新到区块链中。
在本发明实施例中,区块链节点在获取到身份数据的全局摘要值后,将全局摘要值与该身份数据的身份标识建立关联关系,然后将该关联关系发送到区块链网络中进行共识,区块链网络中的各个节点则在权限列表中存储该对应关系。
对于共识算法,参照图5所示,本发明实施例提供的一种区块链节点共识算法主要包括两个阶段:全局知识共识阶段和随机见证备份阶段。
其中,所述系统链提供的全局知识内容包括有:当前可用节点列表,所述可用节点是指近期可以参与共识的且未出现故障的节点,或者说,是存活时间还未成零的节点;一致的随机数种子,随机数种子定期更新,不被任何节点控制。
1、随机见证备份的具体流程如下:
2、共识节点不断接收区块链网络中的交易,验证通过后放入内存池;
3、当内存池的交易达到一定数量或定时器超时后,将交易打包成区块体,节点可以被称为出块节点;
4、以当前可用节点列表为输入,使用当前的随机数种子,基于可验证随机函数VRF生成N个见证节点;
5、出块节点将区块体发送给见证节点,见证节点校验无误后向出块节点返回自己对交易的签名,并在本地缓存区块体;
6、出块节点收到足够数量见证节点的签名之后,将其放入区块头中,得到最后完整的区块,并向全网广播区块头,保证区块头全网同步;
7、见证节点收到区块头后,将其保存下来并和缓存的区块头合并,得到完整的区块,并随机选择M个备份节点,向他们发送完整的区块;
备份节点收到区块后,进行备份保存。
当一个节点加入区块链系统后,会定期向系统链发送心跳交易,更新自己的存活时间值,随着区块的不断产生,新区块会将可用节点的存活时间值减一,并清除存活时间成零的节点。除此之外,节点也可以主动发送退出网络的事务来退出网络。需要说明的是,节点列表没有保持最新的需要,允许存在一定的延迟。
进一步地,随机数种子可以通过共识过程中区块的哈希值来生成。可选的,采用最新区块的临近区块的哈希值,可以避免广播延迟带来的问题。
随机见证备份阶段是通过常数级时间复杂度的随机化备份代替O(n)时间复杂度的全网备份过程。其中,O(n)时间复杂度是线性级的,O(n)时间复杂度指数据量增大 n倍,耗时增大n倍。因此,O(1)就是最低的时空复杂度,也就是耗时/耗空间与输入数据大小无关,无论输入数据增大多少倍,耗时/耗空间都不变。无论数据规模多大,都可以在一次计算后找到目标。
特别的,本发明实施例采用的随机见证共识方案不同于传统共识机制将所有数据复制至每个节点,而是将数据备份保存到常数个节点,因此,随着节点的数量增加,账本的写入速率和存储空间也随之增加,更适合大数据的场景。
步骤106,根据所述权限,对所述操作请求进行处理。
图12是本发明实施例提供的一种操作请求处理的示意图,参见图12,可知本发明实施例通过策略语言确定所述操作请求的操作权限的具体步骤:
本发明实施例的策略语言支持多种基本程序语言功能,包括:
1)支持多样的输入,策略引擎的输入一般是用户或节点对于某种操作的请求,因此操作的多样性决定了输入的多样性,本发明实施例的策略引擎可以接受多数量且多类型的输入数据。
2)支持各种数据结构,例如整型、浮点型、字符串、数组、结构体等,本发明实施例的策略引擎可以满足不同的场景下数据有不同的数据结构,需要以特定的方式存储的需求。
3)支持变量的声明和定义,变量可以使得权限判断过程中存在中间值的记录与更新,本申请发明实施例的权限控制可以结合变量的修改进行灵活地设计。
4)支持算术运算和逻辑判断,本申请发明实施例的策略引擎支持算术运算和逻辑判断,例如支持数值大小比较等,使得权限控制的评判维度更加丰富。
5)支持模块化设计,策略引擎支持模块化设计,例如子策略代码块或函数等,可以提高其可读性和鲁棒性。
6)支持输出的多样性,策略引擎应该对用户或节点的请求进行合理地返回,传统的区块链权限控制框架一般仅返回布尔型的Yes/No,而本申请的策略引擎可以承担修改身份信息的任务,其输出存在多样性,不仅能返回布尔型,还可返回数值型的结果,例如字符串等。
可选地,所述操作请求包括:
访问请求、存储请求、检索请求、修改请求、针对任一数字对象的权限更改请求中至少一种。
所述访问请求指用户请求访问区块链;所述存储请求指用户请求在所述区块链存储数字对象;所述检索请求指用户请求在所述区块链检索特定数字对象或数字信息;所述检索请求指用户请求在所述区块链检索特定数字对象或数字信息;所述修改请求指用户请求在所述区块链修改特定数字对象或数字信息;所述针对任一数字对象的权限更改请求指用户请求在所述区块链更改特定数字对象的权限。
所述包括至少一种即最少包括访问请求、存储请求、检索请求、修改请求、针对任一数字对象的权限更改请求中的一种,也可以包括其中的两种或多种。
可选地,所述方法还包括:
步骤107:获取身份数据以及权限策略数据。
在本申请实施例中,因为用来判断用户权限的权限策略数据一旦确定,往往修改的频率很低;而身份信息数据量较大,有一定的隐私性且经常被修改,所以该本申请实施例将权限相关数据解耦为“权限策略数据”和“身份数据”两大部分,分别存储,便于更加灵活地分别修改策略和身份数据。
参照图4,其示出了本发明实施例的一种区块链的权限数据存储方法图。区块链系统中设置有单链结构的系统单链,系统单链中包含有区块M+1、区块M、区块N、区块 N-1等,其中区块M+1指向区块M,区块M指向区块N,区块N指向区块N-1,依此类推,区块之间通过哈希指针相连;区块链系统还设置有IPFS网络,用来存储身份数据。图中策略即所述权限策略数据。
步骤108:将所述身份数据发送至存储服务端进行存储,并接收所述存储服务端返回的摘要值,并建立所述身份数据对应的身份标识和所述摘要值。
所述身份数据的摘要,通过所述分布式存储网络——IPFS星际文件系统生成。当有文件存储至IPFS分布式存储网络,节点首先会计算文件内容,并根据统一的计算方法得出该文件的唯一标识Cid,即文件的摘要。将身份数据存储至IPFS分布式存储网络,节点首先会计算身份数据内容,并根据统一的计算方法得出该身份数据的唯一标识Cid,即身份数据的摘要。
将所述身份数据发送至存储服务端进行存储包括:将所述身份数据划分为至少一个身份数据块并发送至所述分布式存储网络;所述分布式存储网络用于将所述身份数据块存入所述分布式存储网络中的存储块,并基于所述存储块中的身份数据生成全局摘要值;
图6是本发明实施例提供的一种分布式存储网络的数据组织结构图。参见图6,IPFS 分布式网络使用Merkle DAG(默克尔有向无环图)作为存储身份数据内容的结构,每一个存储单位称为block,如果存储的身份数据文件内容小于一个block的容量大小,则存入一个block即可;如果存储的身份数据文件内容大于一个block的容量大小,则身份数据文件会被分成多个相同大小的数据块,并且用Merkle DAG进行组织,最后IPFS分布式存储网络创建一个空块,将身份数据文件的所有其他部分链接到该空块。IPFS分布式存储网络分别给每个block内容计算出唯一标识身份数据分块摘要Cid,当所有块的身份数据分块摘要Cid计算完之后,将所有的块的唯一标识Cid组合成一个数组,再次计算得到一个身份数据摘要Cid,并以此作为该文件最终的唯一标识,该唯一标识可以为该身份数据的全局摘要值,其数据组织结构参见图6所示。
在本申请实施例中,将多个分块摘要Cid合并为一个全局摘要值可以为IPFS网络执行。还可以由IPFS网络将各个分块摘要Cid发送给该区块链节点,然后由区块链节点将多个分块摘要Cid合并为一个全局摘要值。
参照图7所示,图7是本发明实施例提供的一种区块链中身份数据的存储流程图。
可见,假设有1MB文件D,本发明实施例可将文件D从第一个字符开始按照256KB 一个块,等额分成4个chunk,即有D={chunk1,chunk2,chunk3,chunk4}。对于划分好的块内容,系统调用BDLedger节点中的IPFS接口服务,将chunk的内容存储到IPFS 网络中,并得到相应的Cid,例如H={Cid1,Cid2,Cid3,Cid4},其中,H被称之为全局摘要。用户将全局摘要H填入添加权限AddAccess中的Data字段,将其封装进系统链的事务中,并对整笔事务签名,最后发送至系统链网络,系统链网络进过共识算法的共识,则完成身份信息数据的存储。
特别的,在所述等额划分文件的步骤中,划分文件得到的块的大小可以自由配置,即可以按照256KB划分,也可以按照512KB划分,按照300KB划分等等,可以根据文件的大小选择最合适的划分方式,本申请实施例不对其加以限制。
身份数据的存储可以理解为一种存证操作,不需要绑定存储者的签名,仅仅需要将身份数据的摘要在系统链上进行共识即可实现数据的同步。
将身份数据存储于IPFS分布式存储网络,并将身份数据的摘要上传系统单链,将权限策略数据存入系统单链,这样的存储方法既可以满足区块链系统数据的一致性,又可以提高区块链系统的存储能力。
本发明实施例考虑到IPFS分布式存储网络的资源宝贵性,采用遵循“最小修改”的原则来修改身份数据。所述遵循“最小修改”原则更新身份数据,
参见图8,图8是本发明实施例提供的一种区块链中身份数据的修改流程图,当希望修改一个文件D中的chunk2数据,使得chunk2增加了128KB,增加的部分为addition,具体修改流程如下:
1、通过UpdateData方法,修改文件D中的chunk2为Newchunk2和addtion(chunk5);
2、得到修改过后的D={chunkl,Newchunk2,chunk5,chunk3,chunk4};
3、直接计算Newchunk2和addtion(chunk5)的摘要,而不将chunk3的内容补齐到addition的末尾;
4、重新计算Newchunk2和chunk5的摘要得Cidn2与Cid5;
5、不需要重新更新存储整个数据,直接将新产生的两个分片存储到分布式网络,得到全局摘要Hn={Cid1、Cidn2,Cid5,Cid3,Cid4};
6、在系统链上更新Hn={Cid1、Cidn2,Cid5,Cid3,Cid4},完成身份数据的修改。
采用所述身份信息修改的方法,可以深度利用IPFS分布式存储网络基于内容寻址和存储的优势,同时降低了全网存储和计算的开销。
假设策略语言返回的更新后的身份信息为newStr,更新前的身份信息为oldStr,则更新过程的伪代码如下。可以看出,首先需要判断更新前的分片信息内容是否还出现在新的身份信息中,并进行标记,标记过的内容可以不作处理,扫描完成之后,对所有未标记的连续片段,再次进行分片和分布式存储,并将最新的摘要信息更新到系统单链上,达成共识。
步骤109:将所述身份数据对应的身份标识和所述摘要值在所述区块链中进行共识以在所述区块链中全局存储摘要列表,以及将所述权限策略数据在所述区块链中进行共识以在所述区块链中全局存储权限策略数据。
步骤110:根据所述身份数据和所述区块链中存储的权限策略数据,确定所述操作请求的操作权限。
可选地,所述身份数据包括身份标识和用户角色,所述权限策略数据包括:对不同的角色设定有至少部分不同的第一权限规则数据;所述步骤110,包括:
子步骤1101:根据所述第一权限规则数据,确定所述用户角色所具有的权限范围是否涵盖所述操作权限。
所述第一权限规则数据,包含有预先设定的用户角色与操作权限的对应关系,用于判断发送操作请求的用户角色是否具有相应的操作权限。
如下示例,示例中判断操作请求键中的角色“role”值是否为Admin,如果是,则返回True,表示具有admin的权限:
然后基于admin的权限,对操作请求进行相应处理。
在本申请实施例中,可以有三种不同层级的权限机制设计:内置RBAC权限控制机制(Role Based Access Control,基于角色的访问控制)、用户可配置的RBAC权限控制机制(Role Based Access Control,基于角色的访问控制)和用户自定义的ABAC权限控制机制(Attribute-Based Access Control,基于属性的访问控制)。
其中,所述内置RBAC权限控制机制针对没有任何访问控制基础和代码能力,即仅仅使用系统功能的用户。系统包括Admin、Consensus、Writer、Reader四种角色,并有consensus、writerledger.readledger三种业务权限,和assignUser_Admin、assignUser_Consensus、assignUser_Writer、assignUser_Reader 四种身份授予权限,如表3所示。
表3内置RBAC权限机制角色与权限表
该机制设计比较简单,只需要通过user_is_granted方法判断请求中用户的角色和对应的权限是否匹配,而updatedata方法用于添加和修改权限身份信息,便于仅仅使用系统功能的用户操作。
所述用户可配置的RBAC权限控制机制针对没有代码基础但是有访问控制知识的用户。首先,系统中需要存在一个能够初始化和冷启动的角色,并将该角色分配给一个实际使用的用户,如下示例的Admin,并将其分给了alice。可以看到,Admin角色拥有“roles/*”.“roles/*/*.“grants/*”、“grants/*/*"四种更新身份数据有关的权限。“grants/*”表示Admin可以添加一种角色,“grants/*/*”表示可以给角色添加相应的权限,“roles/*”表示可以添加一个用户,“roles/*/*”表示可以给用户分配任意的角色。因此,alice可以通过发送BDLedger事务的形式将新增的角色和权限更新到身份数据中,例如,当alice 分别执行了“grants/Writer”、“grants/Writer/writeledger"、“roles/bob”、“roles/bob/Writer”之后,身份数据变成如下所示,其余的设置同理,以此实现可配置的RBAC权限控制。
这种机制的灵活性和易用性都适中,用户可以根据自己不同场景的需求,自行地定义角色的种类和相应的权限,只需要通过简单地发事务即可进行创建和删除,方便有访问控制知识的用户使用。
可选地,所述权限策略数据中还包括:基于权限判断参数的第二权限规则数据,所述步骤110,还包括:
子步骤1102:调用外置函数,获取所述用户标识对应的目标权限判断参数。
所述外置函数是依赖外部调用的函数,特别的,外置函数可以由使用者自行定义。所述目标权限判断参数即判断操作权限需要的,通过外置函数获得的参数。
外置函数通过钩子函数引入。策略引擎将相应的参数传入外置函数,系统通过策略语言识别并执行完毕后将执行结果返回至策略语言中调用外置函数的地方,继续进行权限判断。
本申请实施例中常用的外置函数为获得请求访问的频率的函数GetFrequency与获得操作请求的数据量的函数GetDataVolume。GetFrequency可以得到某一用户在单位时间访问目标数据的次数,而GetDataVolume可以得到某一用户在单位时间访问目标数据的数据量。在本发明实施例,策略语言可以根据需要将这两个指标作为判定操作是否合法的依据,示例如下:
子步骤1103:根据所述第二权限规则数据和权限判断参数,判断所述用户标识是否具有所述操作权限。
在先技术的区块链的权限控制大多仅仅通过角色的身份与授权对应判断,未来我们需要更细粒度的权限控制方式,而外置函数可以将链上记录的多种多维度的数据有效地结合,实现了更细粒度的权限控制方法。
所述第二权限规则数据除了包括预先设定的身份与操作权限的对应关系,还包括相应外置函数的数据判断指标,例如:短时间内大量的操作请求会使系统负载过大,因此可以包含,当某一用户在单位时间访问目标数据的次数大于设定访问阈值,则拒绝该用户操作请求,反之,则继续处理该操作请求;其中,单位时间访问目标数据的次数可以自行设定。又比如,当某一用户在单位时间下载目标数据的次数大于设定下载阈值,则拒绝该用户操作请求,反之,当某一用户在单位时间下载目标数据的次数小于或等于设定下载阈值,则继续处理该操作请求。
本申请实施例中,前述用户自定义的ABAC权限控制机制针对有访问控制知识基础和代码能力的用户。其身份和权限的关系如表4所示,此机制在读写账本的权限中加入了数据访问量和访问频率两个指标,并且当访问量和访问频率达到一定程度时,会对请求进行拒绝。首先判断发起请求的用户身份,并根据身份判定相应的操作是否合法。以consensus_abac的策略为例,在确定用户身份是Consensus之后,分三种情况判断操作ops,如果是consensus,则无需进行另外判断,如果是writerledger或readledger,则要调用外置函数进行基于属性的权限判断。修改身份信息有关的代码,通过user_is_granted判断用户身份和权限的合法性,updatedata通过add和del两个操作来添加权限信息和删除权限信息,与用户可配置的RBAC权限控制机制一致。
表4自定义ABAC权限机制角色与权限表
该权限控制框架可以提供完全自定义的基于属性的权限控制机制ABAC给用户使用,是灵活性最高但易用性最差的模式。用户可以在策略中灵活定义各种变量和参数,并针对用户的行为进行访问控制。
该权限控制框架可以提供完全自定义的基于属性的权限控制机制ABAC给用户使用,是灵活性最高但易用性最差的模式。用户可以在策略中灵活定义各种变量和参数,并针对用户的行为进行访问控制。
可选地,所述步骤104,包括:
子步骤1041:在缓存哈希表的键中查询所述摘要值。
参见图10,图10是本发明实施例提供的一种区块链中身份数据的查询流程图,当节点收到来自客户端的权限控制请求需要查询身份数据,具体流程如下:
先在本地查询所述身份数据的摘要Hj,如果缓存哈希表hashmap中存在所查询的身份数据摘要,则从双向链表中读取对应身份数据;如果缓存哈希表hashmap中不存在所查询的身份数据摘要,则在IPFS分布式存储网络中发起分布式查询,得到最后的身份数据;最后更新双向链表的优先级。
所述缓存哈希表中的键Key存储文件块的存储索引Hi,值Value存储双向链表中的节点。
子步骤1042:在所述缓存哈希表的键存在所述摘要值的情况下,根据所述键对应的值,确定双向链表中的目标节点。
所述双向链表由头指针Head和尾指针Tail分别控制头尾,其间的节点首尾相连,且节点个数存在上限,与缓存哈希表预设的大小相同。特别的,缓存哈希表的预设大小是确定的,可以用户自行设定。
参见图9,图9是本发明实施例提供的一种缓存哈希表和双向链表的关系图(图中缓存哈希表大小为3),可见:
所述基于所述区块链中存储的摘要值,从所述存储服务端获取身份数据,也即是结合LRU缓存算法查询身份数据,LRU缓存算法的基本步骤如下:
1、在缓存哈希表的键中查询需要获取的身份数据摘要值;
2、在所述缓存哈希表的键存在所述摘要值的情况下,根据所述键对应的值,确定双向链表中的目标节点;
3、从所述目标节点中读取所述摘要值对应的身份数据,以O(1)复杂度将所述目标节点移动到所述双向链表的头指针之后。
4、在所述缓存哈希表的键不存在所述摘要值的情况下,在所述存储服务端中查询所述摘要值对应的身份数据。
为了实现算法,需要维护Node和LRUCache两个数据结构;
其中,Node数据结构表如下:
表5 Node数据结构表
LRUCache数据结构表如下:
表6 LRUCache数据结构表
子步骤1043:从所述目标节点中读取所述摘要值对应的身份数据,并将所述目标节点移动到所述双向链表的头指针之后。
因为双向链表中头指针指向缓存块中最近一次被访问的数据,所以将所述目标节点移动到所述双向链表的头指针之后,可以更新链表的数据。
可选地,所述步骤104还包括:
子步骤1044:在所述缓存哈希表的键不存在所述摘要值的情况下,在所述分布式存储网络服务端查询所述摘要值对应的身份数据。
子步骤1045:在查询到所述摘要值对应的身份数据后,在双向链表中创建新的节点。
具体在双向链表中创建新的节点是将新的节点以o(1)的时间复杂度插入头指针,并更新记录至缓存哈希表。
子步骤1046:将所述身份数据存入所述新的节点,并所述将所述新的节点移动到所述双向链表的头指针之后。
可选地,所述在步骤1045之前,还包括:
子步骤1047:在确定所述双向链表的记录数达到上限的情况下,删除所述双向链表的尾指针指向的节点。
因为双向链表中尾指针指向缓存块中最久没有被访问的数据,所以在双向链表的记录数达到上限的情况下,将所述双向链表的尾指针指向的节点删除。
可选地,所述步骤1044,还包括:
子步骤10441:在查询到的身份数据为至少一个身份数据块的情况下,将所述至少一个身份数据块进行拼接,获得拼接数据。
图11是本发明实施例提供的一种区块链中身份数据的拼接示意图,当节点收到来自客户端的操作请求后,先识别操作请求的内容得到其身份数据的摘要列表H,先在本地查询H,如果本地命中,则从双向链表中读取相应身份数据分块的内容,对于本地缓存没有命中的,在IPFS网络发起分布式查询并得到身份数据分块的内容。通过上述步骤得到所有身份数据分块后,将所有的身份数据分块进行拼接,将其中所有的占位符进行移除,得到最终的身份数据。
子步骤10442:移除所述拼接数据中的占位符,获得最终的身份数据。
所述占位符是在IPFS网络存储身份数据时,身份数据块的容量小于存储块时,额外添加的字符,用于补足身份数据块的容量与存储块相同,方便存储。比如身份数据块的大小只有250KB,而存储块的大小为256KB,那么可以在身份数据块后面添加6KB的占位符,然后存储到该存储块中。如此,后续对于一个身份数据,将其多个身份数据块进行拼接的时候,如果某个或者某几个身份数据块中存在前述占位符,则可以在拼接后,将上述占位符删除,以保证身份数据的正确性。
可选地,所述步骤104之后,还包括:
步骤111:根据所述身份数据,计算对应的校验摘要值。
因为身份数据通过IPFS分布式存储网络计算出对应的唯一的摘要值,因此通过身份数据可以计算得到唯一摘要值,即校验摘要值。
步骤112:将所述校验摘要值和所述目标摘要值进行对比,确定所述身份数据的真实性。
因为一个身份数据生成的摘要值唯一,所以当所述校验摘要值和所述目标摘要值相同时,获得的所述身份数据真实准确;反之,身份数据真实性存疑。
步骤113:在所述身份数据真实的情况下,执行根据所述身份数据和所述区块链中存储的权限策略数据,确定所述访问请求的操作权限的步骤。
步骤114:在所述身份数据不真实的情况下,向客户端发送身份不真实的校验结果。
在本申请实施例中,身份数据不真实意味着IPFS网络中的身份数据可能被篡改,则为了保证安全,向客户端发送身份不真实的校验结果,且不对操作请求进行后续的处理过程,比如禁止访问数据,禁止写入数据等。
最后,从底层角度介绍有关本发明实施例提供的一种区块链权限机制。参见图14,图14是本发明实施例提供的一种区块链权限机制系统UML图(Unified Modeling Language统一建模语言),可见:区块链权限机制最核心的一个结构是Permission,包括四个对象:存储权限信息的Access、维护chunk信息的LRUCache、IPFS服务对象Ipfssrv 和权限持久化模块Datastore。
其中,Access是存储在内存中的权限信息,存储着系统级别的权限CreateLedger、AddToNetwork和多账本的权限Ledgers。当节点启动时,会读取被Datastore模块持久化到硬盘中的权限信息并初始化维持在内存中,
在步骤101中,当系统单链有信息更新的事务被提交到某个区块链节点之后,该区块链节点会首先修改Access的内容,并实时或周期地持久化到硬盘上。Access中BaseControl存储了一条权限规则的基本属性,分别是Owner、Policy和Data,Owner是权限规则的创造者,Policy是具体权限控制相关的代码,只有Owner可以修改Policy, Data包含有身份数据,使用一个Hash数组进行存储,其中保存着每个Chunk分片的在 IPFS网络的索引Cid,即并不把身份信息的实际内容可持久化在系统链中,如此可以降低全网存储的开销。Ipssrv维护了BDLedger中IPFS网络服务的对象,并提供了相应的接口,其中主要包含了存储数据的Add函数、获取数据的Get函数,还有可持久化存储的Pin函数。LRUCache作为平衡存储和及时响应需求的中间层数据结构,使用HashMap 和链表进行组织。
本发明实施例中,在步骤101中,当和权限有关的事务进行提交或当查询请求到达一区块链节点时,区块链节点会调用ACEI(Application Consensus EngineInterface)框架的Application进行处理。其中,ACEI框架修改自Tendemint的ABCI(ApplicationBlockchain Interface),将区块链中从产生交易到区块共识的全过程进行抽象,以接口的形式提供给开发者进行自定义。本发明实施例中使用到的两个接口是 CheckTx(*RequestNativeCheckTx)*ResponseNativeCheckTx和DeliverTx (*RequestNativeDeliverTx)*t.ResponseDeliverTx。
当有请求到达该区块链节点时,该区块链节点中的该框架会调用CheckTx的逻辑进行合法性的判定,例如更新权限信息合法性的判定和写入账本合法性的判定,一旦验证通过之后,会将该事务加入到缓存池中。等到事务被打包到区块并出块时,会调用DeliverTx将交易进行执行,例如在系统单链上更新权限信息,或修改账本数据等。
本发明实施例中,客户端可以通过向区块链节点发起事务的形式更新权限信息。Application对象持有一个Permission的对象,并将检查和修改的任务交予Pemission对象进行处理。对于系统单链上直接存储的Owner、Policy而言,主要有六个方法负责检查和修改权限信息,分别是:
1)HandleCheckAddccess(data*Addccess):检查添加权限信息的操作是否合法。
2)Handledccess(data*Addccess):当权限还没有被初始化时,进行初始化。
3)HandleCheckUpdateOwner(data*UpdateOwner,who model.Address):检查更新权限Owner的操作是否合法。
4)HandleUpdateOwner(data*UpdateOwner,who model.Address):更新权限的Owner。
5)HandleCheckUpdatePolicy(data*UpdatePolicy,who model.Adres):检查更新权限 Policy的操作是否合法。
6)HandleUpdatePolicy(data*UpdatePolicy,who model.Adress):更新权限的Policy。
以上六个方法对应有三个操作所需的相关参数,分别是AddAccess、UpdateOwner和UpdatePolicy。
对于AddAccess来说,如果某一种权限未被初始化时,则任何用户都可以进行初始化,如果权限已经被初始化,则任何添加权限的行为都视为非法操作。
对于UpdateOwner和UpdatePolicy而言,只有权限的Owner才可以进行修改,否则都视为非法操作。合法的操作将会修改Access内存中的信息,并同步写入到持久化硬盘中。有关三种参数的数据结构如下:
本申请实施例使用Datastore模块进行可持久化,Datastore实现定义了一个数据库所需要使用的操作。因为系统单链.上保存了区块链网络全局的一些信息,权限信息是其中的一种。为了保证节点在启动的时候不需要扫描系统链.上的全部事务以得出最新的权限信息,故需要周期地将内存中的信息存储到硬盘中。
其中,用于管理不同类型数据库的DSMgr可以支持多种类型数据库的创建,例如:Badger、FlatFS、LevelDB等,而使用性能较高的数据库LevelDB存储权限信息。因为LevelIDB的读写操作都是基于键值对而言的,所以需要根据存储信息的不同设置好相应的键key。本申请实施例的权限类别主要有三种,分别是CreateL edger.AddToNetwork和账本权限,而每种权限类别需要存储的信息有Owner、Policy.Data.因此,考虑到键值对数据库索引查询的效率,对方案框架的可持久化存储做如表7的键值对设计:
表7可持久化存储键值对设计表
系统单链上存储的Data内容可以是所有分片Chunk在IPFS网络中的摘要Cid。当策略引擎需要使用完整的身份数据时,再根据摘要进行本地查询或分布式查询。当身份数据分片成Chunk之后,需要使用BDLedger的IPFS服务将相应的分片内容存储到IPFS 网络中,通过调用Ipssrv对象的Add方法即可实现将字节流数据data传入到IPFS的存储网络,函数实现如下所示。
当节点需要在IPFS网络中发起分布式查询时,通过传入Chunk数据的摘要Cid,调用Ipssrv对象的Get方法,即可从IPFS网络中读取相应的数据,函数实现如下所示。
最后,无论是哪类操作在代码层面都会被封装成CheckSysOperation和CheckLedgerOperation两个数据结构,分别表示系统级别和账本级别的权限控制,CheckSysOperation和CheckLedgerOperation两个数据结构的具体内容如表8、表9所示:
表8 CheckSysOperation数据结构表
表9 CheckLedgerOperation数据结构表
对CheckSysOperation来说,Systype表示系统级别权限的类型,1和2分别表示createledger和addtonetwork相关的权限判断,未来可以根据需求再添加类型;Optype表示操作请求的类型,0表示更新身份信息的请求,1表示权限控制判定相关的请求;Parameter定义了添加账本的名称等需要的参数。
由于策略框架提供用户足够的可定制化,因此用户需要根据自己设计的访问控制策略,在请求时构造相应的输入,其中最关键的就是访问内容Query和访问参数Input,访问内容指策略代码中的某一变量的最终值,例如:代码中使用allow作为某一操作的访问控制结果,则Query需要设置成allow,则从返回值True或False即可判定权限控制的结果。类似的,如果是修改身份信息的操作,且以updatedata变量作为修改后的返回值,则Query设定成updatedata即可获得最新的身份信息内容。而Input则指在策略代码判定的过程中可能需要的参数,例如发起请求的账户名、发起操作的名称等。 CheckLedgerOperation的字段内容与CheckSysOperation基本类似。
本发明实施例所述方法将进行权限控制需要的信息解耦为权限策略数据和身份数据,将修改频率很低的权限策略数据存入系统单链,将经常被修改的且数据量较大的身份数据存于分布式存储网络,并通过分布式存储网络计算得到身份数据的摘要,将身份摘要存入系统单链,最后同步系统单链上的数据,相较于在先技术将权限控制需要的信息在全节点进行全量数据备份,本发明实施例将身份摘要存入系统单链,可以满足区块链数据的一致性;将大数据区块链系统中的身份信息分片存于分布式存储网络,而不是存于系统链上,系统链上存储的是身份数据的摘要值而不包括身份数据的具体内容,因此,在区块链的区块链节点上存储的跟权限相关的列表中的数据少,可以降低全网存储的开销,方便研发机构之间对于海量数据的维护和管理。
其次,本发明所述方法在分布式存储网络发起分布式查询身份数据之前,先在本地的缓存哈希表键值中查询区块链中存储的摘要值,在缓存哈希表的键值中有所述摘要值的情况下,获得键值对应的双向链表中的对应节点,然后从所述目标节点中读取摘要值对应的身份数据。本申请所述方法考虑到访问频率高的信息下一次被访问的概率也相对较高,引入缓存算法,先在缓存哈希表中查询相应的身份数据,可以节省网络资源,避免节点每次从分布式网络查询,消耗大量的网络资源;可以以较高的效率维护身份数据的查询需求。
另外,本发明所述方法在判断操作请求的权限时,可以调用外置函数引用更多维度多类型的数据。使用外置函数,本申请所述方法可以在权限判断过程中引入系统的若干指标,帮助区块链实现类似基于属性的权限控制,实现了更细粒度的权限控制方法。
参照图15,本发明还包括一种数字对象访问控制装置,其特征在于,应用于区块链节点,所述装置包括:
操作请求接收模块201,用于接收客户端发送的针对数字对象的操作请求。
身份标识获取模块202,用于根据所述操作请求,获取身份标识。
摘要值获取模块203,用于根据所述身份标识,从所述区块链本地存储的摘要列表中获取所述身份标识对应的目标摘要值;所述摘要列表已在所述区块链节点所属区块链中共识。
身份数据获取模块204,用于根据所述目标摘要值,从分布式存储网络服务端中获取对应的目标身份数据。
权限认证模块205,用于根据所述身份数据与所述区块链本地存储的权限策略数据,确定所述操作请求的权限;所述权限策略数据已在所述区块链节点所属区块链中共识。
操作请求处理模块206,用于根据所述权限,对所述操作请求进行处理。
可选地,所述操作请求包括:
访问请求、存储请求、检索请求、修改请求、针对任一数字对象的权限更改请求中至少一种。
可选地,所述装置还包括:
数据获取模块,用于获取身份数据以及权限策略数据。
数据处理模块,用于将所述身份数据发送至存储服务端进行存储,并接收所述存储服务端返回的摘要值,并建立所述身份数据对应的身份标识和所述摘要值。
共识模块,用于将所述身份数据对应的身份标识和所述摘要值在所述区块链中进行共识以在所述区块链中全局存储摘要列表,以及将所述权限策略数据在所述区块链中进行共识以在所述区块链中全局存储权限策略数据。
权限确定模块,用于根据所述身份数据和所述区块链中存储的权限策略数据,确定所述操作请求的操作权限。
可选地,所述身份数据包括身份标识和用户角色,所述权限策略数据包括:对不同的角色设定有至少部分不同的第一权限规则数据;所述权限确定模块,包括:
第一权限确定模块,用于根据所述第一权限规则数据,确定所述用户角色所具有的权限范围是否涵盖所述操作权限。
可选地,所述权限策略数据中还包括:基于权限判断参数的第二权限规则数据,所述权限确定模块,还包括:
外置函数调用模块,用于调用外置函数,获取所述用户标识对应的目标权限判断参数。
第二权限判断模块,用于根据所述第二权限规则数据和权限判断参数,判断所述用户标识是否具有所述操作权限。
可选地,所述身份数据获取模块204,包括:
第一查询模块,用于在缓存哈希表的键中查询所述摘要值。
目标节点获取模块,用于在所述缓存哈希表的键存在所述摘要值的情况下,根据所述键对应的值,确定双向链表中的目标节点。
第一身份数据获取模块,用于从所述目标节点中读取所述摘要值对应的身份数据,并将所述目标节点移动到所述双向链表的头指针之后。
可选地,所述身份数据获取模块204还包括:
第二查询模块,用于在所述缓存哈希表的键不存在所述摘要值的情况下,在所述分布式存储网络服务端查询所述摘要值对应的身份数据。
节点创建模块,用于在查询到所述摘要值对应的身份数据后,在双向链表中创建新的节点。
节点更新模块,用于将所述身份数据存入所述新的节点,并所述将所述新的节点移动到所述双向链表的头指针之后。
可选地,所述在节点创建模块之前,还包括:
节点删除模块,用于在确定所述双向链表的记录数达到上限的情况下,删除所述双向链表的尾指针指向的节点。
可选地,所述第二查询模块,还包括:
身份数据拼接模块,用于在查询到的身份数据为至少一个身份数据块的情况下,将所述至少一个身份数据块进行拼接,获得拼接数据。
占位符移除模块,用于移除所述拼接数据中的占位符,获得最终的身份数据。
可选地,所述身份数据获取模块204之后,还包括:
校验摘要值获取模块,用于根据所述身份数据,计算对应的校验摘要值。
验证模块,用于将所述校验摘要值和所述目标摘要值进行对比,确定所述身份数据的真实性。
执行模块,用于在所述身份数据真实的情况下,执行根据所述身份数据和所述区块链中存储的权限策略数据,确定所述访问请求的操作权限的步骤;在所述身份数据不真实的情况下,向客户端发送身份不真实的校验结果。
上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本申请的保护之内。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种数字对象访问控制方法及装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (11)
1.一种数字对象访问控制方法,其特征在于,应用于区块链节点,所述方法包括:
接收客户端发送的针对数字对象的操作请求;
根据所述操作请求,获取身份标识;
根据所述身份标识,从所述区块链本地存储的摘要列表中获取所述身份标识对应的目标摘要值;所述摘要列表已在所述区块链节点所属区块链中共识;
根据所述目标摘要值,从分布式存储网络服务端中获取对应的目标身份数据;
根据所述身份数据与所述区块链本地存储的权限策略数据,确定所述操作请求的权限;所述权限策略数据已在所述区块链节点所属区块链中共识;
根据所述权限,对所述操作请求进行处理。
2.根据权利要求1所述的方法,其特征在于,所述操作请求包括:
访问请求、存储请求、检索请求、修改请求、针对任一数字对象的权限更改请求中至少一种。
3.根据权利要求1所述的方法,其特征在于,还包括:
获取身份数据以及权限策略数据;
将所述身份数据发送至存储服务端进行存储,并接收所述存储服务端返回的摘要值,并建立所述身份数据对应的身份标识和所述摘要值;
将所述身份数据对应的身份标识和所述摘要值在所述区块链中进行共识以在所述区块链中全局存储摘要列表,以及将所述权限策略数据在所述区块链中进行共识以在所述区块链中全局存储权限策略数据;
根据所述身份数据和所述区块链中存储的权限策略数据,确定所述操作请求的操作权限。
4.根据权利要求3所述的方法,其特征在于,所述身份数据包括身份标识和用户角色,所述权限策略数据包括:对不同的角色设定有至少部分不同的第一权限规则数据;所述根据所述身份数据和所述区块链中存储的权限策略数据,确定所述操作请求的操作权限,包括:
根据所述第一权限规则数据,确定所述用户角色所具有的权限范围是否涵盖所述操作权限。
5.根据权利要求3所述的方法,其特征在于,所述权限策略数据中还包括:基于权限判断参数的第二权限规则数据,所述根据所述身份数据和所述区块链中存储的权限策略数据,确定所述操作请求的操作权限,还包括:
调用外置函数,获取所述用户标识对应的目标权限判断参数;
根据所述第二权限规则数据和权限判断参数,判断所述用户标识是否具有所述操作权限。
6.根据权利要求1所述的方法,其特征在于,所述根据所述目标摘要值,从分布式存储网络服务端中获取对应的目标身份数据,包括:
在缓存哈希表的键中查询所述摘要值;
在所述缓存哈希表的键存在所述摘要值的情况下,根据所述键对应的值,确定双向链表中的目标节点;
从所述目标节点中读取所述摘要值对应的身份数据,并将所述目标节点移动到所述双向链表的头指针之后。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在所述缓存哈希表的键不存在所述摘要值的情况下,在所述分布式存储网络服务端查询所述摘要值对应的身份数据;
在查询到所述摘要值对应的身份数据后,在双向链表中创建新的节点;
将所述身份数据存入所述新的节点,并所述将所述新的节点移动到所述双向链表的头指针之后。
8.根据权利要求6所述的方法,其特征在于,所述在双向链表中创建新的节点之前,还包括:
在确定所述双向链表的记录数达到上限的情况下,删除所述双向链表的尾指针指向的节点。
9.根据权利要求7所述的方法,其特征在于,所述在所述缓存哈希表的键不存在所述摘要值的情况下,在所述分布式存储网络服务端查询所述摘要值对应的身份数据,还包括:
在查询到的身份数据为至少一个身份数据块的情况下,将所述至少一个身份数据块进行拼接,获得拼接数据;
移除所述拼接数据中的占位符,获得最终的身份数据。
10.根据权利要求1所述的方法,其特征在于,所述根据所述目标摘要值,从分布式存储网络服务端中获取对应的目标身份数据之后,还包括:
根据所述身份数据,计算对应的校验摘要值;
将所述校验摘要值和所述目标摘要值进行对比,确定所述身份数据的真实性;
在所述身份数据真实的情况下,执行根据所述身份数据和所述区块链中存储的权限策略数据,确定所述访问请求的操作权限的步骤;
在所述身份数据不真实的情况下,向客户端发送身份不真实的校验结果。
11.一种数字对象访问控制装置,其特征在于,应用于区块链节点,所述装置包括:
操作请求接收模块,用于接收客户端发送的针对数字对象的操作请求;
身份标识获取模块,用于根据所述操作请求,获取身份标识;
摘要值获取模块,用于根据所述身份标识,从所述区块链本地存储的摘要列表中获取所述身份标识对应的目标摘要值;所述摘要列表已在所述区块链节点所属区块链中共识;
身份数据获取模块,用于根据所述目标摘要值,从分布式存储网络服务端中获取对应的目标身份数据;
权限认证模块,用于根据所述身份数据与所述区块链本地存储的权限策略数据,确定所述操作请求的权限;所述权限策略数据已在所述区块链节点所属区块链中共识;
操作请求处理模块,用于根据所述权限,对所述操作请求进行处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210930802.7A CN115277242A (zh) | 2022-08-04 | 2022-08-04 | 一种数字对象的访问控制方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210930802.7A CN115277242A (zh) | 2022-08-04 | 2022-08-04 | 一种数字对象的访问控制方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115277242A true CN115277242A (zh) | 2022-11-01 |
Family
ID=83749202
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210930802.7A Pending CN115277242A (zh) | 2022-08-04 | 2022-08-04 | 一种数字对象的访问控制方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115277242A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110414268A (zh) * | 2019-07-23 | 2019-11-05 | 北京启迪区块链科技发展有限公司 | 访问控制方法、装置、设备及存储介质 |
US20200204557A1 (en) * | 2018-12-19 | 2020-06-25 | International Business Machines Corporation | Decentralized database identity management system |
CN113722274A (zh) * | 2021-08-09 | 2021-11-30 | 河南农业大学 | 一种高效的R-tree索引遥感数据存储模型 |
CN113779605A (zh) * | 2021-09-14 | 2021-12-10 | 码客工场工业科技(北京)有限公司 | 一种基于联盟链的工业互联网Handle标识体系解析认证方法 |
-
2022
- 2022-08-04 CN CN202210930802.7A patent/CN115277242A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20200204557A1 (en) * | 2018-12-19 | 2020-06-25 | International Business Machines Corporation | Decentralized database identity management system |
CN110414268A (zh) * | 2019-07-23 | 2019-11-05 | 北京启迪区块链科技发展有限公司 | 访问控制方法、装置、设备及存储介质 |
CN113722274A (zh) * | 2021-08-09 | 2021-11-30 | 河南农业大学 | 一种高效的R-tree索引遥感数据存储模型 |
CN113779605A (zh) * | 2021-09-14 | 2021-12-10 | 码客工场工业科技(北京)有限公司 | 一种基于联盟链的工业互联网Handle标识体系解析认证方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Peng et al. | FalconDB: Blockchain-based collaborative database | |
CN111338766B (zh) | 事务处理方法、装置、计算机设备及存储介质 | |
US11743137B2 (en) | Systems, methods, and apparatuses for implementing a metadata driven rules engine on blockchain using distributed ledger technology (DLT) | |
CN102129469B (zh) | 一种面向虚拟实验的非结构化数据访问方法 | |
EP4254183A1 (en) | Transaction processing method and apparatus, computer device, and storage medium | |
CN111597015B (zh) | 事务处理方法、装置、计算机设备及存储介质 | |
US20200057865A1 (en) | Management of co-ownership database system | |
CN109074387A (zh) | 分布式数据存储区中的版本化分层数据结构 | |
US20080028000A1 (en) | Synchronization operations involving entity identifiers | |
CN110633378A (zh) | 一种支持超大规模关系网络的图数据库构建方法 | |
CN111770149A (zh) | 基于分布式存储的新型联盟链 | |
CN109902127B (zh) | 历史态数据处理方法、装置、计算机设备及存储介质 | |
CN113010476A (zh) | 元数据查找方法、装置、设备及计算机可读存储介质 | |
CN113254424B (zh) | 数据服务迁移方法、装置及设备 | |
US10387384B1 (en) | Method and system for semantic metadata compression in a two-tier storage system using copy-on-write | |
CN115277242A (zh) | 一种数字对象的访问控制方法及装置 | |
CN115314220A (zh) | 一种区块链的权限数据存储方法、装置及系统 | |
CN115114294A (zh) | 数据库存储模式的自适应方法、装置、计算机设备 | |
US11789971B1 (en) | Adding replicas to a multi-leader replica group for a data set | |
CN114385657A (zh) | 数据存储方法、装置及存储介质 | |
US20240104074A1 (en) | Location-constrained storage and analysis of large data sets | |
CN117873967B (zh) | 分布式文件系统的数据管理方法、装置、设备及存储介质 | |
Bruhn | Comparison of Distribution Technologies in Different NoSQL Database Systems | |
CN117131023B (zh) | 数据表处理方法、装置、计算机设备和可读存储介质 | |
Bartlang | Architecture and methods for flexible content management in peer-to-peer systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |