
特权账户的适用范围
以太坊账户文档区分外部账户与合约账户:前者由私钥控制,后者由合约逻辑控制。特权账户并非第三种账户类型,而是应用权限层面的称呼。本文讨论以太坊智能合约中的管理权限,不把这些机制视为所有区块链的统一规则。
权限集中与密钥风险
当一个外部账户拥有多项关键权限时,其私钥失控可能同时影响多个管理功能。问题不仅在于账户是否安全,还在于一次失控能影响多大范围。合约账户也可以承接管理权限,但其控制逻辑仍需检查,不能仅凭地址属于合约就认定安全。

业务角色与管理员角色混淆
OpenZeppelin 的访问控制机制区分所有权与角色授权。拥有某项业务角色,不等于可以给其他地址分配该角色;授权和撤销通常由对应的管理员角色负责。默认管理员还具有管理自身的能力,因此需要特别关注。

检查权限不能只看角色名称。例如,一个地址没有直接执行某项业务的权限,但能够授予自己该权限,仍然具有间接控制能力。权限分析应同时覆盖业务入口和角色管理关系。
交接错误与放弃所有权
所有权转移给无法操作合约的地址,可能使管理功能失去可用的控制者。Ownable2Step 通过新所有者主动接受来完成交接;放弃 Ownable 所有权则会使受 onlyOwner 保护的功能无法再被调用。
交接前需要确认接收方具备实际操作能力。放弃权限也不等于整个系统不存在特权,因为其他角色或独立合约可能仍保有控制能力;判断范围应覆盖相关权限路径。
角色成员不透明与权限残留
基础 AccessControl 不支持链上枚举全部角色成员,可通过授权、撤销事件在链下追踪;需要链上枚举时可采用相应扩展。仅查询一个已知地址,不能证明不存在其他角色持有者。
权限复核应回答三个问题:谁能执行关键操作,谁能改变授权,以及权限如何交接或退出。既要检查已不再需要的授权是否残留,也要检查必要管理能力是否被误删。最小权限的目标是减少不必要的控制范围,而不是机械地移除所有管理功能。