
授权问题的适用范围
“区块链授权协议”在这里指链上应用判断谁能执行某项操作的规则,不特指一种统一协议。理解它需要分别回答三个问题:请求来自谁、请求者拥有什么权限、执行时权限是否仍然有效。以下以以太坊账户与智能合约访问控制为范围,不将这些机制视为所有区块链的共同实现。
账户、密钥与数字签名
以太坊账户文档区分由私钥控制的外部账户与由代码控制的合约账户。数字签名用于验证请求的签署者;交易 nonce 则用于防止同一账户的同一笔交易被重复执行。钱包是与账户交互的应用或界面。
这些概念解决不同问题:地址标识账户,签名提供身份验证依据,nonce 约束交易重复执行。通过签名验证,并不意味着请求者自动拥有某个合约的管理权限;后续仍需检查业务规则。交易层的 nonce 也不能直接替代应用自定义授权的防重复使用设计。
所有者与基于角色的权限
OpenZeppelin 的访问控制文档介绍了所有者模式与基于角色的访问控制。前者用一个所有者账户管理受限操作;后者将不同操作分配给不同角色,并通过管理员规则授予或撤销角色。两步所有权交接需要接收方确认,合约也可以由多签合约持有。
单一管理主体、权限种类较少时,所有者模式较容易理解。若不同参与者承担不同职责,角色划分更便于限定权限。例如,允许某账户执行一种管理操作,不必同时赋予它分配其他账户权限的能力。这体现了最小权限原则。
权限变更与多签的边界
授权设计不仅要描述谁现在有权,还要说明谁能改变权限。业务执行权与权限管理权应分别理解,否则容易低估管理员对系统的影响。
多签适用于需要多个参与者共同控制管理操作的情形。它改变的是管理账户的决策条件,具体操作是否允许,仍取决于目标合约的权限检查。角色划分与多签可以组合使用,分别处理职责范围和共同确认的问题。
常见问题:签名、撤销与历史效果
连接钱包是否等于获得合约权限?不能据此判断。钱包提供交互入口,权限来自合约认可的账户身份及其授权状态。
撤销权限是否会取消过去的操作?权限撤销通常影响后续受限调用,不会自动逆转已经完成的状态变化。因此,解释授权机制时,应同时说明授权对象、可执行动作、管理主体和撤销后的作用范围。