基于角色的权限控制¶
标签:安全控制
权限控制
当前基于表的权限控制,由于涉及到许多系统表,要求用户对底层的逻辑有一定理解,使用门槛较高。从2.5.0版本开始,基于已有的表权限控制模型,新增了ChainGovernance预编译合约,用于实现基于角色的权限控制。
角色定义¶
分为治理方、运维方、监管方和业务方。考虑到权责分离,治理方、运维方和开发方权责分离,角色互斥。
治理方:拥有投票权,可以参与治理投票(AUTH_ASSIGN_AUTH),可以增删节点、修改链配置、添加撤销运维、冻结解冻合约、对用户表的写权限控制。链级别的可变配置的权限。
运维方:由治理方添加运维账号,运维账号可以部署合约、创建表、管理合约版本、冻结解冻本账号部署的合约。
业务方:业务方账号由运维添加到某个合约,可以调用该合约的写接口。
监管方:监管方监管链的运行,能够获取链运行中权限变更的记录、能够获取需要审计的数据
权限¶
以下简称治理账号为委员。
权限项命名符合动宾结构。
增删委员、修改委员权重、修改生效阈值三个操作,需要有效投票权重/总权重>生效阈值生效。其中总权重=SUM(委员权重)
治理账号可以添加运维账号,但治理账号不拥有运维的权限
运维账号可以为某个合约添加业务账号,但运维账号没有业务账号权限
权限项¶
权限操作 | 控制方式 | 命名 | 默认阈值 | 修改方式 |
---|---|---|---|---|
增删委员 | 控制写权限表 | AUTH_ASSIGN_AUTH | 0.5 | 委员投票 |
修改委员权重 | 控制写权限表 | AUTH_ASSIGN_AUTH | 0.5 | 委员投票 |
修改生效投票阈值(投票委员权重和大于该值) | 控制写权限表 | AUTH_ASSIGN_AUTH | 0.5 | 委员投票 |
增删节点(观察/共识) | 控制写共识表 | AUTH_CTRL_NODE | 委员可操作 | |
修改链配置项 | 控制写配置表 | AUTH_MODIFY_CONFIG | 委员可操作 | |
冻结解冻合约 | 合约生命周期 | AUTH_CTRL_CONTRACT_LIFE | 委员可操作 | |
添加撤销运维 | AUTH_CTRL_OPERATOR | 委员可操作 | ||
用户表写权限 | AUTH_CTRL_USER_TABLE | 委员可操作 | ||
部署合约 | _sys_tables_的写权限 | AUTH_CREATE_TABLE | 运维操作 | |
创建表 | _sys_tables_的写权限 | AUTH_CREATE_TABLE | 运维操作 | |
合约版本管理 | CNS | AUTH_CTRL_CNS | 运维操作 | |
冻结解冻本账号部署的合约 | 修改合约状态 | 运维操作 | ||
调用合约 | 合约表写权限 | 业务操作 |
计票与生效¶
所有治理操作需要有效投票数/委员数>生效阈值才能生效
每次投票操作,如果是委员投票,则记录操作内容和投票委员,不重复计票
每次投票操作,计票结束后,计算有效投票数/委员数,如果大于此操作的生效阈值,则对应操作生效,写入
投票设置过期时间,根据块高,blockLimit的10倍,固定不可改
功能列表¶
增删委员计票与生效
修改委员权重计票与生效
修改生效阈值计票与生效
委员增删运维
委员解冻冻结合约
委员增删节点
委员修改系统配置
权限项默认阈值存储
运维部署合约的权限
运维管理合约版本的权限
委员相关¶
function grantCommitteeMember(address user) public returns (int256);
function updateCommitteeMemberWeight(address user, int256 weight) public returns (int256);
function revokeCommitteeMember(address user) public returns (int256);
function listCommitteeMembers() public returns (string);
// threshold取值范围[0,100]
function updateThreshold(int256 threshold) public returns (int256);
运维相关¶
function grantOperator(address user) public returns (int256);
function revokeOperator(address user) public returns (int256);
function listOperator() public returns (string);
数据结构¶
表:_sys_committee_votes_
¶
_id_ |
_status_ |
_num_ |
key | value | origin | enable_num |
---|---|---|---|---|---|---|
key是账户,value记录
grant/revoke
,origin记录投票人key是
账户_update_weight
,value记录目标权重,origin记录投票人key是
账户_weight
,value记录权重key是
auth_threshold
,value记录当前阈值key是
update_auth_threshold
,value记录目标阈值,origin记录投票人