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

news2024/11/28 19:25:44

    在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.coloradmin.cn/o/1300186.html

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

相关文章

simulink MATLABFunction模块中实时函数调用函数的使用

样例 function Predyy matlabceshi(input, Time_s) input1 input; Time_s1 Time_s; Predyy ee(input1) mm(Time_s1); end 上面是主要部分,下面是被调用部分 function A ee(input1) A input1 * 100; end function B mm(Time_s1) B Time_s1 * 100; end 模型…

每日一练【盛最多水的容器】

一、题目描述 11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明…

Threejs发光闪烁提示特效

一、导语 发光闪烁特效应该在我们的项目中是经常需要去封装的一个特效吧,一般用于点击选择,选中物体,或者一些特效加持于中心物体,物体碰撞检测后的发光特效等等 二、分析 我们可以合理的使用后处理特效,上步骤&am…

深度学习与计算机视觉技术的融合

深度学习与计算机视觉技术的融合 一、引言 随着人工智能技术的不断发展,深度学习已经成为了计算机视觉领域的重要支柱。计算机视觉技术能够从图像和视频中提取有用的信息,而深度学习则能够通过学习大量的数据来提高计算机视觉技术的性能。本文将探讨深…

简易加减运算器的制作----数字电路设计(含proteus仿真)

简易加减运算器的制作 一、功能要求—基本功能 1、自制0-9按键,在一个LED数码管上稳定地显示当前按下的值。(基本功能) 2、增加、两个按键,实现0-9两个一位数的加法运算,同时在两位LED上稳定地显示运算结果。&#…

[MySQL--进阶篇]存储引擎的体系结构、简介、特点、选择

前言 ⭐Hello!这里是欧_aita的博客。 ⭐今日语录:不要在乎别人怎么看你,因为他们根本就没有时间,他们只关心他们自己。 ⭐个人主页:欧_aita ψ(._. )>⭐个人专栏: 数据结构与算法 MySQL数据库 存储引擎 前言MySQL体…

class066 一维动态规划【算法】

class066 一维动态规划 算法讲解066【必备】从递归入手一维动态规划 code1 509斐波那契数列 // 斐波那契数 // 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 // 该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。…

049:VUE 引入jquery的方法和配置

第049个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

PWN动态调试

这篇文章就是来教大家学习怎么动态调试的,然后我还写了一篇关于动态调试的文章,不是buu上面的题,就是两道简单的栈溢出问题,那两道题挺有特点的。大家可以去看看。 每日3道PWN之课外2道(第2.5天)-CSDN博客 …

uniApp项目的创建,运行到小程序

一、项目创建 1. 打开 HBuilder X 2. 右击侧边栏点击新建,选择项目 3. 填写项目名,点击创建即可 注:uniapp中如果使用生命周期钩子函数,建议使用哪种 ?(建议使用Vue的) 二、运行 1. 运行前先登录 2. 登录后点击 manifest.js…

基于SSM的酒店管理旅店系统(Java毕业设计)

大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的方法。无论你是…

模块一——双指针:202.快乐数

文章目录 题目描述简单证明补充知识算法原理代码实现 题目描述 题目链接:202.快乐数 为了方便叙述,将对于⼀个正整数,每⼀次将该数替换为它每个位置上的数字的平方和这⼀个操作记为x操作; 题目告诉我们,当我们不断重…

Python之random和string库学习

一、random库 random是python中用来生存随机数的库。具体用法如下: 1、生成一个0到1随机浮点数 random.random() 2、生成一个a到b的随机浮点数 random.uniform(1,2) 3、生成一个a到b之间的整数 random.randint(a,b) 4、随机从序列元素中取出一个值,…

基于SpringBoot+Vue的学校在线学习系统

开发环境 IDEA JDK1.8 MySQL8.0Node 系统简介 本系统拥有管理员,教师,学生三种身份登录,管理员登录可以查看所有信息,教师登录可以发布作业,查看试卷,回答问题等,学校登录可以查看作业&…

低代码还是好用的,我持有这个观念

低代码开发是近年来迅速崛起的软件开发方法,让编写应用程序变得更快、更简单。 有人说它是美味的膳食,让开发过程高效而满足,但也有人质疑它是垃圾食品,缺乏定制性与深度。 你认为低代码到底是美味的膳食还是垃圾食品呢&#xff0…

minio的k8s的单机部署

minio的k8s的单机部署 apiVersion: apps/v1 kind: Deployment metadata:name: minionamespace: itshare spec:replicas: 1selector:matchLabels:app: miniotemplate:metadata:labels:app: miniospec:containers:- name: minioimage: minio/minio:RELEASE.2022-10-15T19-57-03Z…

基于Java swing的医院信息管理系统(Java毕业设计)

大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的方法。无论你是…

c++-定长内存池

文章目录 前言一、定长内存池 前言 一、定长内存池 我们知道申请内存使用的是malloc,malloc其实就是一个通用的申请函数,什么场景下都可以用,但是什么场景下都可以用就意味着什么场景下都不会有很高的性能,下面我们来设计一个定…

Windows安装Maven

一、Maven 是什么? Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为 Maven 使用了一个标准的目录结构和一个默认的构建生命周期。 在有多个开发团…

Flutter笔记:滑块及其实现分析1

Flutter笔记 滑块分析1 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/134900784 本文从设计角度&#…