Redis ACL 规则说明

Redis ACL 规则说明

  • 前情回顾
  • ACL 定义规范
    • 启用和禁用用户
    • 允许和禁止调用命令
    • 允许或禁止访问某些 Key
    • 为用户配置有效密码
  • ACL 命令说明

make great efforts

前情回顾

上一篇文章 我们整体性的介绍了 RedisACL,我们来回顾下 ACL 的两种配置方式。

redis 使用 acl 有两种方式可以配置,分别是 configaclfile 模式。在 config 配置文件中配置的 ACL 权限,需要执行 ACL LOAD 或者 重启 Redis 服务 才能生效,事实上我们可以直接在命令行下配置 ACL,在命令行模式下配置的权限无需重启服务即可生效。

我们也可以在命令行模式下配置 ACL 并将其持久化到 aclfile 或者 config 文件中(这取决于配置文件中选择的是 config模式 还是 外部 aclfile 模式),一旦将 user 权限持久化到 aclfileconfig 文件中,下次重启就会自动加载该权限,注意如果忘记持久化,一旦服务宕机或重启,该权限就会丢失。

# 如果使用 config 模式,将 ACL 权限持久化到 redis.conf 文件中使用下面的命令:
config rewrite
 
# 如果使用 aclfile 模式,将 ACL 权限持久化到 users.acl 文件中使用下面的命令:
acl save

说明:redis acl 是 redis v 6.0 扩展的 Auth 机制,因此要使用 acl 功能,redis 服务必须是 6.0 及其以上版本(redis version ≥ 6.0)。

ACL 定义规范

ACL 是使用 DSL(Domain specific language) 定义的,该 DSL 描述了用户能够执行的操作。该规则始终 从上到下,从左到右应用,因为规则的顺序对于理解用户的实际权限很重要。

ACL 规则可以在 redis.conf 文件以及 users.acl 文件中配置 DSL,也可以在命令行中通过 ACL 命令配置

接下来的我们细说 ACL 的规则以及命令描述。

启用和禁用用户

  • on:启用用户:可以以该用户身份进行认证。
  • off:禁用用户:不再可以使用此用户进行身份验证,但是已经通过身份验证的连接仍然可以使用。

允许和禁止调用命令

  • +<command>:将命令添加到用户可以调用的命令列表中。
  • -<command>:将命令从用户可以调用的命令列表中移除。
  • +@<category>:允许用户调用 <category> 类别中的所有命令,有效类别为 @admin,- @set,@sortedset 等,可通过调用 ACL CAT 命令查看完整列表。特殊类别 @all 表示所有命令,包括当前和未来版本中存在的所有命令。
  • -@<category>:禁止用户调用 <category> 类别中的所有命令。
  • +<command>|subcommand:允许使用已禁用命令的特定子命令。
  • allcommands:+@all 的别名。包括当前存在的命令以及将来通过模块加载的所有命令。
  • nocommands:-@all 的别名,禁止调用所有命令。

允许或禁止访问某些 Key

  • ~<pattern>:添加可以在命令中提及的键模式。例如 ~**allkeys 允许所有键。
  • *resetkeys:使用当前模式覆盖所有允许的模式。如:~foo:* ~bar:* resetkeys ~objects:* ,客户端只能访问匹配 object:* 模式的 KEY

为用户配置有效密码

  • ><password>:将此密码添加到用户的有效密码列表中。例如,>mypass“mypass” 添加到有效密码(采用 sha256 加密保存)列表中。该命令会清除用户的 nopass 标记。每个用户可以有任意数量的有效密码。
  • <<password>:从有效密码列表中删除此密码。若该用户的有效密码列表中没有此密码则会返回错误信息。
  • #<hash>:将此 SHA-256 哈希值添加到用户的有效密码列表中。该哈希值将与为 ACL 用户输入的密码的哈希值进行比较。允许用户将哈希存储在 users.acl 文件中,而不是存储明文密码。仅接受 SHA-256 哈希值,因为密码哈希必须为 64 个字符且小写的十六进制字符。
  • !<hash>:从有效密码列表中删除该哈希值。当不知道哈希值对应的明文是什么时很有用。
  • nopass:移除该用户已设置的所有密码,并将该用户标记为 nopass 无密码状态:任何密码都可以登录。resetpass 命令可以清除 nopass 这种状态。
  • resetpass:情况该用户的所有密码列表。而且移除 nopass 状态。resetpass 之后用户没有关联的密码同时也无法使用无密码登录,因此 resetpass 之后必须添加密码或改为nopass 状态才能正常登录。
  • reset:重置用户状态为初始状态。执行以下操作 resetpass,resetkeys,off,-@all

ACL 命令说明

  • ACL HELP,查看 ACL 帮助信息:
alc help

在这里插入图片描述

  • ACL CAT,查看命令类别,用于授权:
# 显示所有的命令类别。
ACL CAT
# 显示所有指定类别下的所有命令。 
ACL CAT <category>
  • ACL DELUSER,删除指定的用户:
# 删除指定的用户
acl deluser <username>
  • ACL DRYRUN,返回用户是否可以在不执行给定命令的情况下执行该命令:
acl dryrun <username> command
  • ACL GETUSER,使用下面的命令查看用户的 ACL 权限:
# 查看用户的 ACL 权限
acl getuser <username>
  • ACL GENPASS,生成一个安全的 256 位用户密码。可选的“位”参数可用于指定不同的大小:
# 删除指定的用户
acl genpass <username>
  • ACL LIST,我们可以使用 ACL LIST 命令来查看当前活动的 ACL,默认情况下,有一个 “default” 用户:
127.0.0.1:6379> acl list
1) "user default on nopass ~* +@all"

其中 user 为关键词,default 为用户名,后面的内容为 ACL规则 描述,on 表示活跃的,nopass 表示无密码, ~* 表示所有key,+@all 表示所有命令。

所以上面的命令表示活跃用户 default 无密码且可以访问所有命令以及所有数据。

  • ACL SETUSER,使用下面的命令创建或修改用户属性,username 区分大小写:
#username区分大小写
#若用户不存在则按默认规则创建用户,若存在则修改用户属性
SETUSER <username> [attribs ...]
 
#若用户不存在,则按默认规则创建用户。若用户存在则该命令不做任何操作。
ACL SETUSER <username> 
 
#若用户不存在,则按默认规则创建用户,并为其增加<rules>。若用户存在则在已有规则上增加 <rules>。
ACL SETUSER <username> <rules> 
  • ACL USERS,返回所有用户名:
acl users
  • ACL WHOAMI,返回当前用户名:
acl whoami
  • ACL LOAD,我们也可以直接在 aclfile 中修改或新增 ACL 权限,修改之后不会立刻生效,我们可以在 redis 命令行中执行 acl load 将该 aclfile 中的权限加载至 redis 服务中:
# 将 aclfile 中的权限加载至 redis 服务中,是配置生效
acl load
  • ACL LOG,查看 ACL 安全日志:
acl log
  • ACL SAVE,前面提到过,我们可以使用 acl save 命令将当前服务器中的 ACL 权限持久化到 aclfile 中,如果没持久化就关闭 redis 服务,那些 ACL 权限就会丢失,因此我们每次授权之后一定要记得 ACL SAVEACL 权限持久化到 aclfile 中:
# 将 acl 权限持久化到磁盘的 aclfile 中
acl save

# 如果使用 redis.conf 配置 ACL,则使用 config rewrite 命令将 ACL 持久化到 redis.conf 中
config rewrite
  • AUTH,使用 auth 命令切换用户:
AUTH <username> <password>

以上就是关于 Redis ACL 命令的详细说明,你 “学废” 了么?

“只有每天不断学习,才能成长为更好的自己。” – 巨石强森(Dwayne Johnson)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【前端学java】复习巩固-Java中的对象比较(14)

往期回顾&#xff1a; 【前端学java】JAVA开发的依赖安装与环境配置 &#xff08;0&#xff09;【前端学 java】java的基础语法&#xff08;1&#xff09;【前端学java】JAVA中的packge与import&#xff08;2&#xff09;【前端学java】面向对象编程基础-类的使用 &#xff08…

Linux:安装MySQL服务(非docker方式)

1、下载安装包 下载MySQL安装包&#xff0c;需要Oracle官网的账号 下面是网友提供的账号及密码&#xff0c;亲测有效。 账户&#xff1a;3028064308qq.com 我用的这个&#xff0c;可以登陆 密码&#xff1a;OraclePassword123!Oracle Account: 602205528qq.com Oracle Pass…

Cesium点位弹窗

1.弹窗没法向加入点位一样加入到地图内部&#xff0c;entity没法实现 2.使用绝对定位&#xff0c;将地图组件通过定位加入到地图上&#xff0c;注意弹窗层级一定在地图上 3.通过判断点击位置是否是点位来获取entity信息&#xff0c;将信息显示在弹窗 4.将点击处点位的经纬度转为…

HarmonyOS脚手架:快捷实现ArkTs中json转对象

前言 在上篇《HarmonyOS开发&#xff1a;UI开展前的阶段总结》中提到了未来的规划&#xff0c;既能让大家学会鸿蒙开发&#xff0c;也能让大家在以后的开发中如虎添翼&#xff0c;最终决定&#xff0c;便以脚手架为产出物&#xff0c;结合实际的业务需求&#xff0c;进行相关技…

JS进阶——高阶技巧

1、深浅拷贝 浅拷贝和深拷贝只针对引用类型 1.1 浅拷贝 浅拷贝&#xff1a;拷贝的是地址 如果是简单数据类型拷贝值&#xff0c;应用数据类型拷贝的是地址&#xff08;简单理解&#xff1a;如果是单层对象&#xff0c;没问题&#xff0c;如果有多层就有问题&#xff09; 常…

查询数据库DQL

DQL 查询基本语法 -- DQL :基本语法; -- 1查询指定的字段 name entrydate 并返回select name , entrydate from tb_emp;-- 2 查询 所有字段 并返回select id, username, password, name, gender, image, job, entrydate, create_time, update_time from tb_emp;-- 2 查询…

15.ORACLE11g的归档方式和日志文件的相关操作

ORACLE11g的归档方式和日志文件的相关操作 一、什么是日志文件1、在线日志文件2、归档日志文件 二、Oracle 11g 归档方式&#xff1a;1、归档方式状态2、归档日志方式下数据库的工作原理3、配置归档日志方式3.1 开启归档模式3.2 日志文件相关操作&#xff1a; 4、oracle11g联机…

#gStore-weekly | gBuilder功能详解之结构化数据抽取

上一个weekly中已经详细讲解了schema的设计&#xff0c;在schema设计好了之后&#xff0c;gBuilder支持将结构化和非结构化数据转化为RDF图数据。其中结构化数据支持数据的无损转化。 1. 技术介绍 gBuilder的结构化数据抽取采用D2RQ技术实现。 DR2Q是一个能够将关系数据库中…

【23真题】很少见!第6题有点新颖!

今天分享的是23年太原理工大学801的信号与系统试题及解析。 本套试卷难度分析&#xff1a;该学校考察数字电路和信号与系统两部分&#xff0c;数字电路我没有知道&#xff0c;所以不知道难度。但是从信号部分来看&#xff0c;考察的知识点非常常见&#xff0c;对信号时域和频域…

基于Spring Boot 框架的试卷自动生成系统的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。你想解决的问题&#xff0c;今天给大家介绍…

11.16~11.19绘制图表,导入EXCEL中数据,进行拟合

这个错误通常是由于传递给curve_fit函数的数据类型不正确引起的。根据你提供的代码和错误信息&#xff0c;有几个可能的原因&#xff1a; 数据类型错误&#xff1a;请确保ce_data、lg_data和product_data是NumPy数组或类似的可迭代对象&#xff0c;且其元素的数据类型为浮点数。…

Altium Designer 相同模块的布局布线复用-AD

1、利用交互式布线&#xff0c;将两个相同模块的元器件在PCB上分块显示。 在原理图中&#xff0c;框选某一模块电路、按快捷键 TS 切换到PCB编辑界面、工具>器件摆放>在矩形区域内排列&#xff08;可将模块中的器件都集中放置到矩形框内&#xff09;。2、为模块电路添加 …

spring-boot-maven-plugin插件 —— 重新打包命名

如果需要重新打包的 jar 具有与项目的 artifactId 属性定义的本地名称不同的名称&#xff0c;只需使用标准 finalName&#xff0c;如下例所示&#xff1a; <build><!-- 打包重命名&#xff0c;打包后文件名称&#xff1a;项目名 --><finalName>${project.ar…

【如何让你的建筑设计更高效】推荐7个3DMAX建筑设计的实用插件

3DMAX是创建具有复杂对象和照片级真实感材质的大型三维项目的绝佳工具。它有用于粒子模拟和参数化建模的内置工具&#xff0c;只要有足够的时间和练习&#xff0c;你就可以创建任何东西。然而&#xff0c;总有改进的余地。许多第三方开发人员已经发布了自己的扩展&#xff0c;也…

课程设计:C++实现哈夫曼编码

功能实现&#xff1a; //1:先计算每个字符的权重//2&#xff1a;构建哈夫曼树//3&#xff1a;得出每个字符的哈夫曼编码。//4:根据哈夫曼编码转化为字符 代码实现&#xff1a; // 哈夫曼编码.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //1:先计…

[ 云计算 | AWS 实践 ] 使用 Java 更新现有 Amazon S3 对象

本文收录于【#云计算入门与实践 - AWS】专栏中&#xff0c;收录 AWS 入门与实践相关博文。 本文同步于个人公众号&#xff1a;【云计算洞察】 更多关于云计算技术内容敬请关注&#xff1a;CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文&#xff1a; [ 云计算 | …

用css实现原生form中radio单选框和input的hover已经focus的样式

一.问题描述&#xff1a;用css实现原生form中radio单选框和input的hover已经focus的样式 在实际的开发中&#xff0c;一般公司ui都会给效果图&#xff0c;比如单选按钮radio样式&#xff0c;input输入框hover的时候样式&#xff0c;以及focus的时候样式&#xff0c;等等&#…

C++学习笔记——C++ deque和vector的区别

C中的std::deque&#xff08;双端队列&#xff09;和std::vector&#xff08;向量&#xff09;是两种不同的容器类型&#xff0c;它们有以下区别&#xff1a; 内部实现方式不同&#xff1a;std::deque使用了一种双端队列的数据结构&#xff0c;它由多个块&#xff08;chunks&am…

软件外包开发需要注意的问题

软件外包开发是一种常见的业务模式&#xff0c;但在选择和合作外包团队时需要注意一些关键问题&#xff0c;以确保项目的成功和顺利进行。以下是一些在软件外包开发过程中需要注意的问题&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开…

[oeasy]python001_先跑起来_python_三大系统选择_windows_mac_linux

先跑起来 &#x1f94a; Python 什么是 Python&#xff1f; Python [ˈpaɪθɑ:n]是 一门 适合初学者 的编程语言 类库 众多 几行代码 就能 出 很好效果 应用场景丰富 在 各个应用领域 都有 行内人制作的 python 工具类库 非常专业、 好用 特别是 人工智能领域 pytho…