什么是acl用户
ACL用户是指在 TongRDS 系统中,通过用户访问控制列表进行身份验证和权限管理的接入账号。
具体来说,ACL用户具有以下几个核心特征:
- 认证与授权分离
ACL(Access Control List)机制将用户的身份认证和权限授权分开管理:
身份认证:通过用户名和密码验证“你是谁”。
权限授权:通过角色决定“你能干什么”。用户本身不具备权限,必须绑定角色才能获得权限。
- 核心配置属性
在配置文件 acl.properties 中,一个 ACL 用户由以下几个关键属性定义:
Username:用户的登录名称。
Password:用户的登录密码,采用 SM3 算法加密存储。
Role_id:用户绑定的角色编号(一个用户可绑定多个角色,权限叠加)。这是用户获取权限的唯一途径。
Active:用户的状态,设为 true 则可正常登录,设为 false 则禁止登录。
- 与角色的关系
角色是权限的载体,定义了可执行的命令(cmd_list)、可访问的数据库(dbs)以及键前缀(key_prefix)。
用户是角色的消费者,通过 role_id 字段与角色关联。例如,配置 WebSession.user0.role_id=1,意味着该用户拥有了 acl.role1 所定义的所有权限。
- 作用范围
ACL 用户的配置在中心节点的 acl.properties 文件中进行,中心节点读取配置后会下发到各个服务节点,从而实现对整个集群用户接入的统一控制。
什么场景下配置acl用户
从redis迁移到rds的时候,如果redis有类似以下的配置:
# 管理员user admin on#4d4e5c... ~* &* +@all# 应用用户user appuser on#8a2b7d... ~app:* &* +@read +get备注:
Redis 6.0 及以上版本引入的 ACL(Access Control List,访问控制列表) 配置。它用于替代早期版本中单一的 requirepass 全局密码认证,实现了多用户和细粒度的权限管控。
如何配置
找到中心节点的安装目录,etc目录下的acl.properties,修改配置参考如下:
# 1. 声明角色数量为2(系统将读取 role0, role1)acl.roles=2# 3. 角色1:超级管理员acl.role0.cmd_list=@all# 4. 角色2:应用管理员acl.role1.cmd_list=@read# ==========================================# 5. 用户配置区# ==========================================# 有多少个用户,例如2就配2,例如3就配3WebSession.users=2# 超级管理员账号:通过 role_id=0 绑定角色0(role0)WebSession.user0.username=adminWebSession.user0.password=6E0F9E14344C5406A0CF5A3B4DFB665F87F4A771A31F7EDBB5C72874A32B2957WebSession.user0.role_id=0WebSession.user0.active=true# 应用管理员账号:通过 role_id=1 绑定角色1(role1)WebSession.user1.username=appuserWebSession.user1.password=6E0F9E14344C5406A0CF5A3B4DFB665F87F4A771A31F7EDBB5C72874A32B2957WebSession.user1.role_id=1WebSession.user1.active=true# 以此类推,例如要配置3个账号,上面的acl.roles 跟WebSession.users 都要配置为3# user得加上下标2,表示从0-2为止,读取第三个,如下所示# WebSession.user2.username=xxx# password 用pmemdb的bin 下执行 ./sM4.sh encrypt 要加密的明文(尽量别用符号) 后获取#WebSession.user2.password=6E0F9E14344C5406A0CF5A3B4DFB665F87F4A771A31F7EDBB5C72874A32B2957# 需要在acl.roles 下配置acl.role2.cmd_list=具体命令,例如@all,@read 等,具体参考下方截图说明或者产品书册里的配置参考手册# WebSession.user2.role_id=2# WebSession.user2.active=true如何验证
配置后,重启pcenter,然后查看pmemdb的logs下是否生成users.acl:
打开查看,示范如下:
同时可以去pmemdb的bin,执行
#6379为连接端口,查看pmemdb的etc下的cfg.xml里的<RedisPort>6379</RedisPort>./Client.sh-r-p6379-u用户名-a密码可以看到,由于appuser只配了@read,所以包括info 和set 指令,执行后都会报错。