联盟链FISCO BCOS权限控制一览
FISCO BCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造。开源工作组成员包括博彦科技、华为、深证通、神州数码、四方精创、腾讯、微众银行、亦笔科技和越秀金科等金链盟成员机构。
作者语
在多方参与的联盟链上,各方分工协作的同时也要做到职责分明、各司其职。链的管理者没有必要“既当裁判又当运动员”的参与业务交易,只参与交易的用户也不必很操心智能合约的开发部署。同时,"DO分离"(开发和运维分离)已经是业界成熟的做法,越权操作会带来风险,最终可能破坏信誉和造成资产损失。
清晰、易用、周全的权限控制能力,无论是对于信息安全,还是为了完善联盟治理,都至关重要。
本文讲的就是FISCO BCOS权限控制这点事,作者从FISCO BCOS的权限分类、典型的联盟链角色设计、权限控制操作基本步骤等角度进行了解析。
Part 1、FISCO BCOS的权限分类
FISCO BCOS在链刚建立起来的时候,为了方便快速地进行开发和体验,默认并没有做任何权限控制。但如果这条链是用来提供企业级服务,则从一开始就要设计权限控制的策略并落实之。
FISCO BCOS的权限分类:
1. 链管理员权限
即“分配权限”的权限,如定义账户A作为链管理员,A可以为账户B、C、D分配权限;可以设置多个管理员,如果不设置管理员,任何账户都可以无差别修改各种权限。
2. 系统管理权限
目前包括4种:
节点管理权限(增删共识节点或观察节点)
系统参数修改权限
修改CNS合约命名权限
能否部署合约和建表的权限
其中部署合约和建表是“二合一”的控制项,在使用CRUD合约时,我们建议部署合约的时候一起把合约里用到的表建了(写在合约的构造函数里),否则接下来读写表的交易可能会遇到“缺表”错误。如果业务流程需要动态创建表,动态建表的权限也应该只分配给少数账户,否则链上可能会出现各种废表。
3. 用户表权限
以用户表为粒度,控制某些账户能否改写某个用户表,以避免用户表被他人意外修改,这个权限要依赖FISCO BCOS的CRUD合约写法。另外,读用户表不受权限控制;如果要进行数据的隐私控制,需要引入数据加密、零知识等技术。
4. 合约接口权限
一个合约可以包括多个接口,由于合约里的逻辑和业务密切相关,接口粒度的权限控制由开发者实现,开发者可对msg.sender或 tx.orgin进行判断,决定是否允许本次调用继续处理。
FISCO BCOS的控制台提供了一系列控制权限的命令,可以很方便的为用户授予(grant)、取消(revoke)、查看(list)各种权限,可以参见控制台的文档。
Part 2、联盟链中典型的权限管理角色设计
在联盟链里,不同的角色各司其职,分工协作,典型的角色设计可参照:
1.链管理员
通常是参与链的多方共同选出一个委员会,一个或多个机构可获得管理员权限,以进行人员管理和权限分配。链管理员并不负责任节点管理,修改系统参数,部署合约等系统管理操作。
2.系统管理员
指定的业务运营人员或系统运维人员,按需分配各种权限,负责日常的链上管理,包括节点增删,系统参数修改等。由链管理员根据大家约定的治理规则来分配权限,比如只允许指定的账户部署合约,则给他们设定合约部署权限,这样其他账户则不能随意部署合约了。
3.交易用户
用户向区块链发送业务交易请求,业务交易主要是调用合约和读写用户表,可以根据业务逻辑,结合用户表权限和合约接口权限来进行灵活的控制。
4.监管方
给监管方分配哪些系统和用户表权限,可参考具体的监管规则,如监管方只读所有数据,则不用设定特殊的权限。
管理不同角色的帐户又是另一个复杂的问题,既要清晰区分,又要便于使用,还要保证帐号安全;万一帐号丢失后要支持找回,帐号泄漏后重置,以后会另文介绍。
Part 3、权限控制操作基本步骤
step1
首先采用控制台grantPermissionManager命令设置一个或多个链管理员角色。
Tips:登陆控制台时,命令行里输入的是私钥明文,而使用grantPermissionManager命令输入的是“账户地址”,要注意区分。如:
用户私钥:3bed914595c159cbce70ec5fb6aff3d6797e0c5ee5a7a9224a21cae8932d84a4
对应地址:0xf1585b8d0e08a0a00fff662e24d67ba95a438256
那么登陆控制台的命令行是:
./start.sh 1 3bed914595c159cbce70ec5fb6aff3d6797e0c5ee5a7a9224a21cae8932d84a4
分配管理员权限的命令行是:
grantPermissionManager 0xf1585b8d0e08a0a00fff662e24d67ba95a438256
当这个账户得到了链管理员权限后,退出当前控制台或切到另一个终端窗口,用这个账户的私钥登陆一次,即可作为链管理员进行后续的操作了。
Tips:一定要记住管理员地址和私钥的对应关系,否则一旦设置管理员权限,只有管理员可以为其他账户分配权限,其他账户的设置操作都会报告没有权限。
step2
用链管理员账户登陆控制台,根据管理策略,依次给其他系统管理员账户分配节点管理权限,系统参数修改权限,CNS权限,部署合约和建表权限等。然后用一个有相应权限的系统管理员账户私钥登陆控制台,如有部署和建表权限的账号,以便进行下一步。
step3
开发者编写CRUD的合约时,一旦合约在链上创建了用户表,则可以采用控制台的grantUserTableManager命令,由有权限的系统管理员指定哪些账号可以创建表和增删改该表的数据,命令行是
grantUserTableManager t_order 0xf1585b8d0e08a0a00fff662e24d67ba95a438256
授权0xf1585b8d0e08a0a00fff662e24d67ba95a438256这个账号可以操作t_order表,而其他账号不行,如要读写该表,继续添加权限,对一个表有读写权限的账号可以有多个。
step4
对solidity合约里的某个接口,可以参考这样的代码进行控制:
function testFunction() public returns(int256)
{
require(msg.sender == tx.origin); //这一行的效果是禁止了合约调合约
if(msg.sender != address(0x156dff526b422b17c4f576e6c0b243179eaa8407) ) //这里为示例,直接写了账户地址明文,实际上开发时可以灵活处理。
{ return -1; } //如果调用者和预设的有权限的调用者不同,则返回
}
msg.sender是当前合约调用者的地址,可以是用户也可以是另一个合约(合约调合约时);tx.origin则是本次交易的真正发起用户,给交易签名的用户。
Part 4、小结及参考资料
本文介绍FISCOBCOS在基础层面上提供的一些接口和能力,权限控制的合理性和周密程度最终会取决于使用者,关于不同链的场景化治理和安全控制,可以继续深入探讨,以得出最佳实践。
参考资料:
P2P网络详细设计参见:https://fisco-bcos-documentation.readthedocs.io/zh_CN/release-2.0/docs/design/p2p/p2p.html
权限控制设计:https://fisco-bcos-documentation.readthedocs.io/zh_CN/release-2.0/docs/design/security_control/permission_control.html
控制台的文档:https://fisco-bcos-documentation.readthedocs.io/zh_CN/release-2.0/docs/manual/console.html
权限控制实操介绍:https://fisco-bcos-documentation.readthedocs.io/zh_CN/release-2.0/docs/manual/permission_control.html
CRUD合约开发介绍:https://fisco-bcos-documentation.readthedocs.io/zh_CN/release-2.0/docs/manual/smart_contract.html#crud
CRUD合约应用示例:https://fisco-bcos-documentation.readthedocs.io/zh_CN/release-2.0/docs/tutorial/sdk_application.html
我们鼓励机构成员、开发者等社区伙伴参与开源共建事业,有你在一起,会更了不起。多样参与方式:
1 进入微信社群,随时随地与圈内最活跃、最顶尖的团队畅聊技术话题(进群请添加小助手微信,微信ID:fiscobcosfan);
2 订阅我们的公众号:“FISCO BCOS开源社区”,我们为你准备了开发资料库、最新FISCO BCOS动态、活动、大赛等信息;
3 来Meetup与开发团队面对面交流,FISCO BCOS正在全国举办巡回Meetup,深圳、北京、上海、成都……欢迎您公众号在菜单栏【找活动】中找到附近的Meetup,前往结识技术大咖,畅聊硬核技术;
4 参与代码贡献,您可以在Github提交Issue进行问题交流,欢迎向FISCO BCOS提交Pull Request,包括但不限于文档修改、修复发现的bug、提交新的功能特性。
代码贡献指引:
https://github.com/FISCO-BCOS/FISCO-BCOS/blob/master/docs/CONTRIBUTING_CN.md
本文首发于公众号【FISCO BCOS开源社区】,如转载请注明出处,原创不易,谢谢珍惜
联盟链FISCO BCOS权限控制一览的更多相关文章
- 第一章 区块链系列 联盟链FISCO BCOS 底层搭建
想了解相关区块链开发,技术提问,请加QQ群:538327407 FISCO BCOS 基础安装教程:https://fisco-bcos-documentation.readthedocs.io/zh ...
- 联盟链FISCO BCOS v2.0.0-rc3 发布
FISCO BCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造.开源工作组成员包括博彦科技.华为.深证通.神州数码.四方精创.腾讯.微众银行. ...
- 第十章 Fisco Bcos 权限控制下的数据上链实操演练
一.目的 前面已经完成fisco bcos 相关底层搭建.sdk使用.控制台.webase中间件平台等系列实战开发, 本次进行最后一个部分,体系化管理区块链底层,建立有序的底层控管制度,实现权限化管理 ...
- 第七章 手动部署Fisco Bcos 区块链并完成新增群组,在原有群组中新增机构
鉴于笔者以前各大博客教程都有很多人提问,早期建立一个技术交流群,里面技术体系可能比较杂,想了解相关区块链开发,技术提问,请加QQ群:538327407 目标 1.新增群组搭建完整联盟链 2.根据群组新 ...
- FISCO BCOS WorkShop | 区块链开发特训营,开课啦!
FISCO BCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造.开源工作组成员包括博彦科技.华为.深证通.神州数码.四方精创.腾讯.微众银行. ...
- 人民网慕课联手FISCO BCOS开源社区上线“区块链学院”
FISCO BCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造.开源工作组成员包括博彦科技.华为.深证通.神州数码.四方精创.腾讯.微众银行. ...
- 人民网基于FISCO BCOS区块链技术推出“人民版权”平台
FISCO BCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造.开源工作组成员包括博彦科技.华为.深证通.神州数码.四方精创.腾讯.微众银行. ...
- Spring Boot 整合 Fisco Bcos(区块链)
简介 FISCO BCOS是由国内企业主导研发.对外开源.安全可控的企业级金融联盟链底层平台,由金链盟开源工作组协作打造,并于2017年正式对外开源. 目前,成熟的区块链的平台不少,之所以选择FISC ...
- 第五章 FISCO BCOS 区块链浏览器的部署
想了解相关区块链开发,技术提问,请加QQ群:538327407 前提 前面我们已经通过底层部署.sdk调测.自定义智能合约编写与部署.联合单元测试调测,已经初步对FISCO BCOS的区块链底层和实际 ...
随机推荐
- UVA - 10305 【全排列】
题意 要求给出一组 包含 1 - N 的数字的序列 要求这个序列 满足 题给的限制条件 比如 1 2 就是 1 一定要在 2 前面 思路 因为 数据规模较小 可以用 全排列 然后判断每个序列 是否满足 ...
- eslint 配合 git (husky)
为了保证每次提交的 git 代码是正确的,为此我们可以使用 eslint 配合 git hook, 在进行git commit 的时候验证eslint规范 如果 eslint 验证不通过,则不能提交. ...
- 《机器学习实战》学习笔记第十三章 —— 利用PCA来简化数据
相关博文: 吴恩达机器学习笔记(八) —— 降维与主成分分析法(PCA) 主成分分析(PCA)的推导与解释 主要内容: 一.向量內积的几何意义 二.基的变换 三.协方差矩阵 四.PCA求解 一.向量內 ...
- ASP.NET MVC3中的路由系统
MVC中,用户访问的地址并不映射到服务器中对应的文件,而是映射到对应Control里对应的ActionMethod,由ActionMethod来决定返回用户什么样的信息.而把用户访问的地址对应到对应的 ...
- UTCformat 转换UTC时间并格式化成本地时间
/** * UTCformat 转换UTC时间并格式化成本地时间 * @param {string} utc */ UTCformat (utc) { var date = new Date(utc) ...
- L83
Kids Gulp 7 Trillion Calories Per Year Kids from the ages of 2 to 19, consume about seven trillion c ...
- 树莓派与 Python —— GPIO
首先来直观地认识树莓派提供的 40 个引脚(GPIO,general purpose i/o,接收外界输入,并向外界提供运算处理后的输出): 1. 安装 从远程库(repositories)中下载安装 ...
- BZOJ_1998_[Hnoi2010]Fsk物品调度_并查集+置换
BZOJ_1998_[Hnoi2010]Fsk物品调度_并查集+置换 Description 现在找工作不容易,Lostmonkey费了好大劲才得到fsk公司基层流水线操作员的职位.流水线上有n个位置 ...
- ACM学习历程—HDU 5317 RGCDQ (数论)
Problem Description Mr. Hdu is interested in Greatest Common Divisor (GCD). He wants to find more an ...
- 解析Monte-Carlo算法(基本原理,理论基础,应用实践)
引言 最近在和同学讨论研究Six Sigma(六西格玛)软件开发方法及CMMI相关问题时,遇到了需要使用Monte-Carlo算法模拟分布未知的多元一次概率密度分布问题.于是花了几天时间,通过查询相关 ...