Redis权限管理体系(一):客户端名及用户名

    在Redis6之前的版本中,因安全认证的主要方式是使用Redis实例的密码进行基础控制,而无法按照不同的应用来源配置不同账号以及更细粒度的操作权限控制来管理。本文先从client list中的信息入手,逐步了解Redis的客户端名设置、用户设置及权限控制管理。

1. 客户端名

1.1  查看客户端连接情况

    在Redis4版本中,使用 client list 命令查看客户端连接情况的时候可以发现,有的name中有名字,而大部分是没有内容的。有的人误以为这个名称是Redis的登录用户名。例如:

127.0.0.1:6379> client list
id=7 addr=127.0.0.1:50194 fd=7 name=testuser age=1222 idle=1185 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=client
id=8 addr=127.0.0.1:50238 fd=8 name= age=1180 idle=1174 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=client
id=9 addr=127.0.0.1:51394 fd=9 name= age=3 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client

6306b269dac6e05a23c7f34fc75633e0.png

而client list命令的结果中的每一列的含义如下:

id: 7, 表示客户端连接的唯一标识符。
addr: 127.0.0.1:50194,客户端的 IP 地址和端口号。
fd: 7,客户端的文件描述符(File Descriptor)。
name: testuser,客户端的连接名字,通常是客户端自己设置的名字,可以用来标识连接来源
age: 1222,客户端连接的时长为 1222 秒。
idle: 1185,客户端的空闲时长为 1185 秒。
flags: N,客户端的连接状态标志,可能包含一系列标志,比如 "O" 表示输出缓冲区有未发送的数据,"S" 表示客户端是被从服务器中阻塞的,"N"表示无特殊标志
db: 0,客户端当前所在的数据库。
sub: 0,客户端订阅的频道数量。
psub: 0,客户端订阅的模式数量。
multi: -1,客户端不在事务中(没有执行 MULTI 命令)。如果客户端在执行事务,则显示事务的 ID;否则,为 "-1"
qbuf: 0,查询缓冲区的长度,即客户端还未读取的查询缓冲区的长度。
qbuf-free: 0, 查询缓冲区的空闲长度长度。
obl: 0,输出缓冲区的长度,即客户端还未读取的输出缓冲区的长度。
oll: 0,输出缓冲区的列表长度。
omem: 0,客户端的输出缓冲区占用内存字节数。
events: r,表示客户端关注可读事件。
cmd: client,表示客户端最后执行的命令是 CLIENT

‍可以看出,上面的名称是客户端的名称,而不是用户名。

1.2 设置客户端连接名

    从上面的内容可以看出,Redis客户端连接名是可以自定义设置的。可以使用 CLIENT SETNAME 命令进行设置,使用 CLIENT GETNAME 命令进行查看。具体操作如下:

# 设置客户端名
127.0.0.1:6379> CLIENT SETNAME gjc
OK
#查看客户端名
127.0.0.1:6379> CLIENT GETNAME 
"gjc"
# 查看客户端连接信息
127.0.0.1:6379> client list
id=7 addr=127.0.0.1:50194 fd=7 name=testuser age=2338 idle=2301 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=client
id=8 addr=127.0.0.1:50238 fd=8 name= age=2296 idle=2290 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=client
id=9 addr=127.0.0.1:51394 fd=9 name=gjc age=1119 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client

f684d5675053b91154f45639a64f879d.png

这样就可以自定义设置客户端名了。 

1.3  客户端名的优缺点

    默认情况下,大部分人操作Redis都不会关注该设置。但其实客户根据情况进行选择是否设置。对于设置客户端名的优缺点如下:

优点:

  • 标识连接来源:设置客户端名字可以用于标识连接的来源。在一个多用户的系统中,可以为每个用户设置一个唯一的名字,便于识别和区分各个连接。

  • 监控和日志:在监控 Redis 连接时,通过客户端名字可以更容易地追踪和诊断问题。日志中包含客户端名字可以使日志更具可读性和可维护性。

  • 权限管理:在一些场景下,可以根据客户端的名字进行权限管理。通过名字可以判断某个连接是否有权限执行特定操作,从而增加安全性。

缺点:

  • 额外开销:每次连接都需要设置名字,这可能会增加一些额外的开销。而名字并不是必须的信息,在连接数很大的情况下,这可能会对性能产生一些影响。

  • 隐私问题:客户端名字可能包含一些敏感信息,特别是在某些情况下,如果客户端名字是用户的用户名等个人信息。这可能引发隐私问题,需要谨慎处理。

  • 不适合匿名连接:在一些场景下,可能存在匿名连接的需求。设置名字可能不适合匿名用户,因为匿名用户不希望暴露任何个人信息

2.  数据库登录用户名

在Redis6版本中执行client list操作时,会看到对于的信息中多了2列,例如:

127.0.0.1:6479> client list
id=4 addr=127.0.0.1:54352 laddr=127.0.0.1:6479 fd=7 name= age=426 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=40928 argv-mem=10 obl=0 oll=0 omem=0 tot-mem=61466 events=r cmd=client user=default redir=-1

a10ce7dc5a7165a60a273ceb8c133635.png

其中多出两列的含义是:

user: default,客户端所属的用户。
redir: -1,重定向的标志,表示没有重定向。0: 表示客户端的连接已经被关闭或者重定向到其他节点。通常,当节点发生主从切换或集群中的槽发生迁移时,客户端可能会被重定向到新的节点。1: 表示客户端正在等待从节点对其进行复制。这通常发生在 Redis 集群中,当主节点变成从节点后,它会等待新的主节点将数据同步至此节点

其中我们可以发现增加了user标志。这是因为在Redis6版本中增加了访问权限控制列表功能(Access Control List,ACL),这个功能可以极大的提升Redis的安全性。

2.1 创建用户名

# 创建用户,>后面为明文密码
127.0.0.1:6479> ACL SETUSER testuser1 on >Test123.com
OK
# 列出用户
127.0.0.1:6479> ACL LIST
1) "user default on #515c217eb413b6aaf09de74bf42c85a6edc09ee7008c6ebedc2981b44bbc0fd3 ~* &* +@all"
2) "user testuser1 on #b6d18faf7ebcfdce9f8782a0aad13c14e2662fcc08072e2738bcb27d04b96188 &* -@all"

2.2  账密认证登录

127.0.0.1:6479> AUTH testuser1 Test123.com
OK
127.0.0.1:6479> client list
NOPERM this user has no permissions to run the 'client' command or its subcommand

因新建的用户没有查看client list的权限,因此另起一个会话用default用户查看连接情况

127.0.0.1:6479> client list
id=4 addr=127.0.0.1:54352 laddr=127.0.0.1:6479 fd=7 name= age=9319 idle=12 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 argv-mem=0 obl=0 oll=0 omem=0 tot-mem=20504 events=r cmd=client user=testuser1 redir=-1
id=5 addr=127.0.0.1:56838 laddr=127.0.0.1:6479 fd=8 name= age=6773 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=40928 argv-mem=10 obl=0 oll=0 omem=0 tot-mem=61466 events=r cmd=client user=default redir=-1
127.0.0.1:6479>

可以看到id=4的连接是新创建的testuser1账号登录的了。

3.  结语

关于Redis中客户端名及登录用户名的区别,先简单演示至此。但关于Redis的权限控制还有很多内容,后续会继续对如何进行账号管理及主要应用场景进行演示。

d113e640953ac14561c68e91d2b5bee9.png

往期精彩回顾

1.  MySQL高可用之MHA集群部署

2.  mysql8.0新增用户及加密规则修改的那些事

3.  比hive快10倍的大数据查询利器-- presto

4.  监控利器出鞘:Prometheus+Grafana监控MySQL、Redis数据库

5.  PostgreSQL主从复制--物理复制

6.  MySQL传统点位复制在线转为GTID模式复制

7.  MySQL敏感数据加密及解密

8.  MySQL数据备份及还原(一)

9.  MySQL数据备份及还原(二)

496d3969de6438dcfdaff863921809ca.png

扫码关注     

3c1f618c14703771ff6e2754bf1ba1c8.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/221968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Monitor, Maintenance Operation, Script code/prgramme】

Summary of M,M&O,Program JD) Monitor & M&O Symbio信必优) Job chance/opportunities on Dec 12th, 20231.1) Content 招聘JD job description:1.2) suggestions from Ms Liang/Winnie on Wechat app1.3) Java微服务是什么?1.3.1) [URL Java 微服务](…

京微齐力:基于H7的平衡控制系统(一、姿态解析)

目录 前言一、关于平衡控制系统二、实验效果三、硬件选择1、H7P20N0L176-M2H12、MPU6050 四、理论简述五、程序设计1、Cordic算法2、MPU6050采集数据3、fir&iir滤波4、姿态解算 六、资源消耗&工程获取七、总结 前言 很久之前,就想用纯FPGA做一套控制系统。可…

C++二维数组(2)

图形相似度 题目描述: 给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。 说明:若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。 两幅图像的相似度定义为相同像素…

橘子学K8S01之容器中所谓的隔离

我们一直都在说容器就是一个沙盒,沙盒技术顾名思义就是像一个集装箱一样,把应用(服务,进程之类的)装起来的技术,这样每个进程在自己的沙盒中和其他的沙盒隔离开来,每个沙盒之间存在一个边界使得他们互不干扰&#xff0…

鸿鹄云商:Java商城引领商业模式的潮流,免费搭建多种商城模式

java SpringCloud版本b2b2c鸿鹄云商平台全套解决方案 使用技术: Spring CloudSpring BootMybatis微服务服务监控可视化运营 B2B2C平台: 平台管理端(包含自营) 商家平台端(多商户入驻) PC买家端、手机wap/公众号买家端 微服务(30个通用…

用23种设计模式打造一个cocos creator的游戏框架----(十六)亨元模式

1、模式标准 模式名称:亨元模式 模式分类:结构型 模式意图:运用共享技术有效地支持大量细粒度的对象 结构图: 适用于: 1、一个应用程序使用了大量的对象. 2、完全由于使用大量的对象,造成很大的存储开…

铭飞CMS list 接口 SQL注入漏洞复现

0x01 产品简介 铭飞CMS是一款基于java开发的一套轻量级开源内容管理系统,铭飞CMS简洁、安全、开源、免费,可运行在Linux、Windows、MacOSX、Solaris等各种平台上,专注为公司企业、个人站长快速建站提供解决方案 0x02 漏洞概述 铭飞CMS在5.2.10版本以前list 接口处存在sql注入…

什么是CAS(比较并交换-乐观锁机制-锁自旋)

什么是 CAS(比较并交换-乐观锁机制-锁自旋) 概念及特性 CAS(Compare And Swap/Set)比较并交换,CAS 算法的过程是这样:它包含 3 个参数CAS(V,E,N)。V 表示要更新的变量(内存值),E 表示预期值(旧…

嵌入式开发板qt gdb调试

1) 启动 gdbserver ssh 或者 telnet 登陆扬创平板 192.168.0.253, 进入命令行执行如下: chmod 777 /home/HelloWorld (2) 打 开 QTcreator->Debug->StartDebugging->Attach to Running Debug Server 进行…

Nginx-nginx-1.18.0编译时默认包含哪些模块?nginx-1.18.0有哪些模块和配置语句,各有什么作用?

目录 01-如何查看 Nginx-nginx-1.18.0编译时默认包含哪些模块?02-如何查看Nginx有哪些自己可以手动设置添加或不添加的模块03-各配置语句和模块功能简介03-001:--pid-pathPATH03-002:--lock-pathPATH 03-003:select_module 03-004…

[湖湘杯 2021 final]MultistaeAgency

题目是给了源码,我们先来看web的main.go package mainimport ("bytes""crypto/md5""encoding/json""fmt""io""io/ioutil""log""math/rand""net/http""os"&q…

ASP.NET Core 8 在 Windows 上各种部署模型的性能测试

ASP.NET Core 8 在 Windows 上各种部署模型的性能测试 我们知道 Asp.net Core 在 windows 服务器上部署的方案有 4 种之多。这些部署方案对性能的影响一直以来都是靠经验。比如如果是部署在 IIS 下,那么 In Process 会比 Out Process 快;如果是 Self Hos…

Linux 线程池源码剖析

1 了解线程池 1-1线程池的概述 由一个任务队列和一组处理队列的线程组成。一旦工作进程需要处理某个可能“阻塞”的操作,不用自己操作,将其作为一个任务放到线程池的队列,接着会被某个空闲线程提取处理。 1-2线程池的组件 任务 待处理的工作,通常由标识、上下文和处理…

Java_内部类枚举

内部类 内部类: 是类中的五大成分之一(成员变量、方法、构造器、内部类、代码块),如果一个类定义在另一个类的内部,这个类就是内部类。场景:当一个类的内部,包含了一个完整的事物,且这个事物没有必要单独设计时&#x…

年度评选揭晓:Apache SeaTunnel荣获年度优秀开源技术团队殊荣

在OSCHINA平台举办的2023年度开源技术团队评选中,Apache SeaTunnel社区凭借其在开源领域的出色表现,荣获“2023年度优秀开源技术团队”奖项。 这一殊荣不仅是对Apache SeaTunnel社区在过去一年中技术贡献的认可,也是对其在开源社区活动运营方…

聊聊Api接口优化的几个方法!

我负责的系统到2021年初完成了功能上的建设,开始进入到推广阶段。随着推广的逐步深入,收到了很多好评的同时也收到了很多对性能的吐槽。刚刚收到吐槽的时候,我们的心情是这样的: 当越来越多对性能的吐槽反馈到我们这里的时候&…

springboot mybatis手动事务

创建springboot项目 搭建最简单的SpringBoot项目-CSDN博客 引入mybatis和数据库依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><…

java设计模式学习之【代理模式】

文章目录 引言代理模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用图片加载示例代码地址 引言 在现实生活中&#xff0c;我们经常使用代理来处理我们不想直接参与或无法直接参与的事务&#xff0c;例如&#xff0c;使用律师来代表法庭上的案件。在软件开发…

JS实现日历表

有需要的可以用一下&#xff0c;这是一个简单的demo. HTML&#xff1a; <table><thead><tr><th colspan"2"><span class"left"></span></th><th colspan"3"><span class"time"&g…

【快速应用开发】看看RedwoodJS

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…