当前位置: 首页 > news >正文

redis 多租户隔离 ACL 权限控制(redis-cli / nodejs的ioredis )

Redis 6版本之后:提供ACL的功能对用户进行更细粒度的权限控制 :(1)接入权限:用户名和密码(2)可以执行的命令(3)可以操作的 KEY

ACL常用规则介绍:

+指令列表   //增加可操作指令列表, 比如:select auth

+@指令类别    //增加可操作指令类别,比如@admin @set

acl cat //查看所有指令类别

~<pattern> //可操作的匹配pattern的键

redis数据库默认是0~15,可通过databases参数调整

redis多租户的几种实现方式:

1.redis6 之后可以通过acl 进行多租户隔离,每个用户一个db

2.基于容器,每个用户一个redis实例。
 

以下代码测试版本为 redis 7.0

redis-cli设置多租户隔离:

ACL SETUSER username on >password +@all ~* -@admin -select +select|5  // +@all 增加所有权限 ~*允许所有键 移除@admin权限 只允许select切换db5

auth username 123456

select 1 //切换db1 会提示没有权限:(error) NOPERM this user has no permissions to run the 'select' command or its subcommand

select 5

ACL DELUSER username  //删除用户

redis-cli --user username --pass 123456 -n 1 # 以db1 连接

nodejs库 ioredis设置多租户隔离:

async function createUser(){const redis = new Redis({password: redisPassword,host: redisHost,port: redisPort});try{const db = genNumber(); //此db 需自动生成递增数字const username = `${serviceName}_ecmaster`, password = uuid.v4().replaceAll("-",""), rules = ['+@all','~*','-@admin','-select',`+select|${db}`,];// 创建用户await redis.acl('SETUSER',username, 'on', `>${password}`,...rules);console.log(`User ${username} created successfully.`);dockerSetting.dataSource.redis = {username,    password,"host": redisHost,"port": redisPort,db}   }catch(e){throw e;}finally{redis.disconnect();}
}async function deleteUser(){const redis = new Redis({password: redisPassword,host: redisHost,port: redisPort});try{const username = `${serviceName}_ecmaster`;
// 删除用户await redis.call('ACL', 'DELUSER', username);console.log(`User ${username} deleted successfully.`);}catch(e){throw e;}finally{redis.disconnect();}
}

redisInsight可视化工具测试,无法在非授权db上操作key了:

http://www.lryc.cn/news/167753.html

相关文章:

  • 【算法专题突破】滑动窗口 - 找到字符串中所有字母异位词(14)
  • C++生成-1到1的随机数
  • React-Hooks 和 React-Redux
  • 虚拟机下载与Ubuntu安装
  • 【小数点】C#使用Math.Round方法保留指定小数点位数,并且整数也同样保持统一的2位
  • Android多种方法获取系统属性
  • 密码学【一】
  • 企业如何选择舆情优化处置公司?
  • HBASE知识点
  • Python新手入门
  • vite + react + typescript + uni-app + node 开发一个生态系统
  • python pdf文件转图片
  • 牛客: BM7 链表中环的入口结点
  • SpringMVC系列(七)之自定义注解
  • MongoDB的搭建 和crud操作
  • 软件设计师考试学习1
  • 【云计算】虚拟私有云 VPC
  • @EventListener 监听事件 ,在同一个虚拟机中如何保证顺序执行
  • 数据结构入门 — 树的概念与结构
  • linux驱动开发day6--(epoll实现IO多路复用、信号驱动IO、设备树以及节点和属性解析相关API使用)
  • 9月15日作业
  • 关于Java多线程的那些事
  • 信息化项目验收的依据、内容和验收测评报告
  • 解决IntelliJ IDEA执行maven打包,执行java -jar命令提示jar中没有主清单属性
  • Python--文件和异常
  • IDEFICS 简介: 最先进视觉语言模型的开源复现
  • 玩转Mysql系列 - 第20篇:异常捕获及处理详解
  • 一些工具类
  • 20230916后台面经整理
  • 如何通过快解析测试接口内外网?本地内网ip让外网访问连接