{"id":27222,"date":"2023-08-15T18:32:57","date_gmt":"2023-08-15T16:32:57","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=27222"},"modified":"2023-08-15T18:32:58","modified_gmt":"2023-08-15T16:32:58","slug":"redis-using-access-control-list-acl-part1","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/","title":{"rendered":"Redis: Using Access Control List (ACL) part1"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"h-introduction\">Introduction: <\/h2>\n\n\n\n<p>Security is an important matter when using or allowing access to your database.You need to be sure that nobody will harm your infrastructure by passing some dangerous commands.<\/p>\n\n\n\n<p>Aim is to limit the access to user to specifics rights when he will authenticate on the database.<\/p>\n\n\n\n<p>For that we will use the <strong>Redis ACL feature<\/strong>.<\/p>\n\n\n\n<p>Let&#8217;s see how it works!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-definition\">Definition <\/h2>\n\n\n\n<p><strong>ACL <\/strong>stands for access control list.<\/p>\n\n\n\n<p>It is the functionality that allows certain connections to be limited in terms of the commands that can be executed and the keys that can be accessed. <\/p>\n\n\n\n<p>It works as follows: <\/p>\n\n\n\n<p>After logging in, a client must provide a valid username and password to authenticate itself. If authentication is successful, the connection is associated with a given user and the limits available to that user. <\/p>\n\n\n\n<p>Redis can be configured so that new connections are already authenticated with a &#8220;default&#8221; user (this is the default configuration). <\/p>\n\n\n\n<p><span style=\"text-decoration: underline\">Note:<\/span><\/p>\n\n\n\n<p>The default user configuration has the side effect of only providing a specific subset of functionality to connections that are not explicitly authenticated.<\/p>\n\n\n\n<p>In the default configuration, <strong>Redis 6<\/strong> (the first version to have ACL) works exactly like older versions of Redis. <\/p>\n\n\n\n<p>Each new connection is able to call all possible commands and access all keys, so the ACL functionality is backwards compatible with older clients and applications. <\/p>\n\n\n\n<p>The old way of setting a password, using the &#8220;requirepass&#8221; configuration directive, still works as expected. However, it now defines a password for the default user<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-know-your-redis-version\">Know your Redis version <\/h2>\n\n\n\n<p>To check your Redis version you have many ways:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use the redis-server &#8211;version in the terminal<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>nso@DBI-LT-NSO:~&gt; redis-server --version<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-4.png\" alt=\"\" class=\"wp-image-27224\" style=\"width:987px;height:104px\" width=\"987\" height=\"104\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-4.png 766w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-4-300x32.png 300w\" sizes=\"auto, (max-width: 987px) 100vw, 987px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use the INFO in the redis CLI , this command will give you all kind of information on your redis server<\/li>\n<\/ul>\n\n\n\n<p>If you are not in the CLI use directly <strong>redis-cli INFO <\/strong>in the terminal <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>127.0.0.1:6379&gt; <code>INFO<\/code><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-6.png\" alt=\"\" class=\"wp-image-27227\" style=\"width:974px;height:281px\" width=\"974\" height=\"281\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-6.png 836w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-6-300x86.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-6-768x221.png 768w\" sizes=\"auto, (max-width: 974px) 100vw, 974px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-authentication-command\">Authentication command<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The Redis <a href=\"https:\/\/redis.io\/commands\/auth\"><code>AUTH<\/code><\/a> command was extended in Redis 6, so now it is possible to use it in the two-arguments form:<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-9-1024x136.png\" alt=\"\" class=\"wp-image-27230\" style=\"width:1031px;height:137px\" width=\"1031\" height=\"137\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-9-1024x136.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-9-300x40.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-9-768x102.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-9.png 1327w\" sizes=\"auto, (max-width: 1031px) 100vw, 1031px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Log with your username and password, Redis CLi will prompt you with a OK in case of success<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-10-1024x132.png\" alt=\"\" class=\"wp-image-27232\" style=\"width:1025px;height:132px\" width=\"1025\" height=\"132\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-10-1024x132.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-10-300x39.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-10-768x99.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-10.png 1407w\" sizes=\"auto, (max-width: 1025px) 100vw, 1025px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Check that you are with the correct user ( we will see how to create and how to allow identification later )<\/li>\n<\/ul>\n\n\n\n<p>Use the <strong>ACL whoami<\/strong> command<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>127.0.0.1:6379&gt; <code>ACL WHOAM<\/code>I<\/code><\/pre>\n\n\n\n<p>( remember commands are not case sensitive )<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-11-1024x180.png\" alt=\"\" class=\"wp-image-27233\" style=\"width:1028px;height:181px\" width=\"1028\" height=\"181\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-11-1024x180.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-11-300x53.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-11-768x135.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-11.png 1348w\" sizes=\"auto, (max-width: 1028px) 100vw, 1028px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-when-acl-is-efficient\">When ACL is efficient<\/h2>\n\n\n\n<p>There is two main reasons to use ACL:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You want to improve security by limiting access to commands and keys, so that untrusted clients have no access at all and trusted clients have just the minimum level of access to the database to do the necessary work. For example, you can allow clients to only execute read-only commands.<\/li>\n\n\n\n<li>You want to improve operational security, so that processes or people accessing Redis cannot damage data or configuration due to software errors or manual mistakes. For example, there is no reason why an working trying to fetch delayed jobs from Redis should be able to call dangerous commands such as the FLUSHALL command<\/li>\n<\/ul>\n\n\n\n<p>You can get more info and use case  of <strong>ACL <\/strong>by checking the Redis official site<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-configure-acl\">Configure ACL<\/h2>\n\n\n\n<p>To configure the right access for our users, we will use the <strong>DSL <\/strong>command <strong>ACL <\/strong>command <\/p>\n\n\n\n<p>Note:<\/p>\n\n\n\n<p>Such rules are always implemented from the first to the last, left-to-right, because sometimes the order of the rules is important to understand what the user is really able to do.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-list-your-users\">List your users<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The default user defined in Redis is called <strong>default<\/strong><\/li>\n<\/ul>\n\n\n\n<p>You can list all the users created by using the command <strong>ACL LIST<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>127.0.0.1:6379&gt; ACL LIST<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-12-1024x177.png\" alt=\"\" class=\"wp-image-27243\" style=\"width:1328px;height:229px\" width=\"1328\" height=\"229\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-12-1024x177.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-12-300x52.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-12-768x133.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-12-1536x266.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-12.png 1886w\" sizes=\"auto, (max-width: 1328px) 100vw, 1328px\" \/><\/figure>\n\n\n\n<p>As you can see I have created other users with different <strong>ACL<\/strong>, we will analyze also the different component of this <strong>ACL LIST <\/strong>output <\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-acl-list-description-and-format\">ACL LIST description and format<\/h2>\n\n\n\n<p>ACL list command reports the list of users <strong>in the same format that is used in the Redis configuration files<\/strong>, by translating the current ACLs set for the users back into their description.<\/p>\n\n\n\n<p>let&#8217;s take the default user as example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\"user default on nopass ~* &amp;* +@all\"<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The first two words in each line are &#8220;user&#8221; ,then you have the <strong>username<\/strong> (here default).<\/li>\n\n\n\n<li>The on\/off part shows if account is active (on) or not (off)<\/li>\n\n\n\n<li>Next part is related to password to require no password (nopass) otherwise a password is set it is displayed as a long hex string that looks pseudo random ( note: Redis Redis internally stores passwords hashed with SHA256.the password topic will be seen later )<\/li>\n\n\n\n<li>To access every possible key (<code>~*<\/code>)<\/li>\n\n\n\n<li>To acces Pub\/Sub channel (<code>&amp;*<\/code>)<\/li>\n\n\n\n<li>To be able to call every possible command <code>+@all<\/code>.To disable use <code>-@all<\/code><\/li>\n<\/ul>\n\n\n\n<p>Also, in the special case of the default user, having the <em>nopass<\/em> rule means that new connections are automatically authenticated with the default user without any explicit <a href=\"https:\/\/redis.io\/commands\/auth\"><code>AUTH<\/code><\/a> call needed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-acl-rules\">ACL Rules<\/h2>\n\n\n\n<p>The following is the list of valid ACL rules extracted from the Redis site. <\/p>\n\n\n\n<p>Certain rules are just single words that are used in order to activate or remove a flag, or to perform a given change to the user ACL. <\/p>\n\n\n\n<p>Other rules are char prefixes that are concatenated with command or category names, key patterns, and so forth.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-enable-and-disallow-users\">Enable and disallow users:<\/h3>\n\n\n\n<p>As explained above with the default user we know now how to enable or disable the user:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>on<\/code>:  Enable the user: it is possible to authenticate as this user.<\/li>\n\n\n\n<li><code>off<\/code>: Disallow the user: it&#8217;s no longer possible to authenticate with this user; however, previously authenticated connections will still work. Note that if the default user is flagged as <em>off<\/em>, new connections will start as not authenticated and will require the user to send <a href=\"https:\/\/redis.io\/commands\/auth\"><code>AUTH<\/code><\/a> or <a href=\"https:\/\/redis.io\/commands\/hello\"><code>HELLO<\/code><\/a> with the AUTH option in order to authenticate in some way, regardless of the default user configuration.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-18-1024x144.png\" alt=\"\" class=\"wp-image-27280\" style=\"width:1116px;height:157px\" width=\"1116\" height=\"157\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-18-1024x144.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-18-300x42.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-18-768x108.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-18-1536x216.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-18.png 1753w\" sizes=\"auto, (max-width: 1116px) 100vw, 1116px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-allow-disallow-commands\">Allow\/Disallow commands:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>+&lt;command&gt;<\/code>: Add the command to the list of commands the user can call. Can be used with <code>|<\/code> for allowing subcommands (e.g &#8220;+config|get&#8221;).<\/li>\n\n\n\n<li><code>-&lt;command&gt;<\/code>: Remove the command to the list of commands the user can call. Starting Redis 7.0, it can be used with <code>|<\/code> for blocking subcommands (e.g &#8220;-config|set&#8221;).<\/li>\n\n\n\n<li><code>+@&lt;category&gt;<\/code>: Add all the commands in such category to be called by the user, with valid categories being like @admin, @set, @sortedset, &#8230; and so forth, see the full list by calling the <a href=\"https:\/\/redis.io\/commands\/acl-cat\"><code>ACL CAT<\/code><\/a> command. The special category @all means all the commands, both the ones currently present in the server, and the ones that will be loaded in the future via modules.<\/li>\n\n\n\n<li><code>-@&lt;category&gt;<\/code>: Like <code>+@&lt;category&gt;<\/code> but removes the commands from the list of commands the client can call.<\/li>\n\n\n\n<li><code>+&lt;command&gt;|first-arg<\/code>: Allow a specific first argument of an otherwise disabled command. It is only supported on commands with no sub-commands, and is not allowed as negative form like -SELECT|1, only additive starting with &#8220;+&#8221;. This feature is deprecated and may be removed in the future.<\/li>\n\n\n\n<li><code>allcommands<\/code>: Alias for +@all. Note that it implies the ability to execute all the future commands loaded via the modules system.<\/li>\n\n\n\n<li><code>nocommands<\/code>: Alias for -@all.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-allow-and-disallow-certain-keys-and-key-permissions\">Allow and disallow certain keys and key permissions:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>~&lt;pattern&gt;<\/code>: Add a pattern of keys that can be mentioned as part of commands. For instance <code>~*<\/code> allows all the keys. The pattern is a glob-style pattern like the one of <a href=\"https:\/\/redis.io\/commands\/keys\"><code>KEYS<\/code><\/a>. It is possible to specify multiple patterns.<\/li>\n\n\n\n<li><code>%R~&lt;pattern&gt;<\/code>: (Available in Redis 7.0 and later) Add the specified read key pattern. This behaves similar to the regular key pattern but only grants permission to read from keys that match the given pattern. See <a href=\"https:\/\/redis.io\/docs\/management\/security\/acl\/#key-permissions\">key permissions<\/a> for more information.<\/li>\n\n\n\n<li><code>%W~&lt;pattern&gt;<\/code>: (Available in Redis 7.0 and later) Add the specified write key pattern. This behaves similar to the regular key pattern but only grants permission to write to keys that match the given pattern. See <a href=\"https:\/\/redis.io\/docs\/management\/security\/acl\/#key-permissions\">key permissions<\/a> for more information.<\/li>\n\n\n\n<li><code>%RW~&lt;pattern&gt;<\/code>: (Available in Redis 7.0 and later) Alias for <code>~&lt;pattern&gt;<\/code>.<\/li>\n\n\n\n<li><code>allkeys<\/code>: Alias for <code>~*<\/code>.<\/li>\n\n\n\n<li><code>resetkeys<\/code>: Flush the list of allowed keys patterns. For instance the ACL <code>~foo:* ~bar:* resetkeys ~objects:*<\/code>, will only allow the client to access keys that match the pattern <code>objects:*<\/code>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-allow-or-disallow-pub-sub-channels\">Allow or disallow Pub\/Sub channels:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>&amp;&lt;pattern&gt;<\/code>: (Available in Redis 6.2 and later) Add a glob style pattern of Pub\/Sub channels that can be accessed by the user. It is possible to specify multiple channel patterns. Note that pattern matching is done only for channels mentioned by <a href=\"https:\/\/redis.io\/commands\/publish\"><code>PUBLISH<\/code><\/a> and <a href=\"https:\/\/redis.io\/commands\/subscribe\"><code>SUBSCRIBE<\/code><\/a>, whereas <a href=\"https:\/\/redis.io\/commands\/psubscribe\"><code>PSUBSCRIBE<\/code><\/a> requires a literal match between its channel patterns and those allowed for user.<\/li>\n\n\n\n<li><code>allchannels<\/code>: Alias for <code>&amp;*<\/code> that allows the user to access all Pub\/Sub channels.<\/li>\n\n\n\n<li><code>resetchannels<\/code>: Flush the list of allowed channel patterns and disconnect the user&#8217;s Pub\/Sub clients if these are no longer able to access their respective channels and\/or channel patterns.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-configure-valid-passwords-for-the-user\">Configure valid passwords for the user:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>&gt;&lt;password&gt;<\/code>: Add this password to the list of valid passwords for the user. For example <code>&gt;mypass<\/code> will add &#8220;mypass&#8221; to the list of valid passwords. This directive clears the <em>nopass<\/em> flag (see later). Every user can have any number of passwords.<\/li>\n\n\n\n<li><code>&lt;&lt;password&gt;<\/code>: Remove this password from the list of valid passwords. Emits an error in case the password you are trying to remove is actually not set.<\/li>\n\n\n\n<li><code>#&lt;hash&gt;<\/code>: Add this SHA-256 hash value to the list of valid passwords for the user. This hash value will be compared to the hash of a password entered for an ACL user. This allows users to store hashes in the <code>acl.conf<\/code> file rather than storing cleartext passwords. Only SHA-256 hash values are accepted as the password hash must be 64 characters and only contain lowercase hexadecimal characters.<\/li>\n\n\n\n<li><code>!&lt;hash&gt;<\/code>: Remove this hash value from the list of valid passwords. This is useful when you do not know the password specified by the hash value but would like to remove the password from the user.<\/li>\n\n\n\n<li><code>nopass<\/code>: All the set passwords of the user are removed, and the user is flagged as requiring no password: it means that every password will work against this user. If this directive is used for the default user, every new connection will be immediately authenticated with the default user without any explicit AUTH command required. Note that the <em>resetpass<\/em> directive will clear this condition.<\/li>\n\n\n\n<li><code>resetpass<\/code>: Flushes the list of allowed passwords and removes the <em>nopass<\/em> status. After <em>resetpass<\/em>, the user has no associated passwords and there is no way to authenticate without adding some password (or setting it as <em>nopass<\/em> later).<\/li>\n<\/ul>\n\n\n\n<p><em>Note: if a user is not flagged with nopass and has no list of valid passwords, that user is effectively impossible to use because there will be no way to log in as that user.<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-configure-selectors-for-the-user\">Configure selectors for the user:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>(&lt;rule list&gt;)<\/code>: (Available in Redis 7.0 and later) Create a new selector to match rules against. Selectors are evaluated after the user permissions, and are evaluated according to the order they are defined. If a command matches either the user permissions or any selector, it is allowed. See <a href=\"https:\/\/redis.io\/docs\/management\/security\/acl\/#selectors\">selectors<\/a> for more information.<\/li>\n\n\n\n<li><code>clearselectors<\/code>: (Available in Redis 7.0 and later) Delete all of the selectors attached to the user.<\/li>\n<\/ul>\n\n\n\n<p>Reset the user:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>reset<\/code> Performs the following actions: resetpass, resetkeys, resetchannels, allchannels (if acl-pubsub-default is set), off, clearselectors, -@all. The user returns to the same state it had immediately after its creation.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-allow-and-block-commands\">Allow and block commands<\/h2>\n\n\n\n<p>To allow and block commands you must use the @all argument (You can be more granular by using +\/- to add or disable commands).<\/p>\n\n\n\n<p>+@all will enable all commands , even the most critical <\/p>\n\n\n\n<p>-@all will disable the commands <\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-create-and-edit-user-acls\">Create and edit user ACLs<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Let&#8217;s create a user and grant him only &#8220;<strong>GET<\/strong>&#8221; command ( we will test if all is working as expected then give more rights) <\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-15-1024x185.png\" alt=\"\" class=\"wp-image-27274\" style=\"width:1116px;height:202px\" width=\"1116\" height=\"202\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-15-1024x185.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-15-300x54.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-15-768x139.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-15.png 1502w\" sizes=\"auto, (max-width: 1116px) 100vw, 1116px\" \/><\/figure>\n\n\n\n<p>If you input the above command it will send you OK but when you will try to authenticate you will get an issue <strong>because we didn&#8217;t set a password<\/strong> and also the on option is not activated <\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-16-1024x92.png\" alt=\"\" class=\"wp-image-27277\" style=\"width:1192px;height:107px\" width=\"1192\" height=\"107\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-16-1024x92.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-16-300x27.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-16-768x69.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-16-1536x138.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-16.png 1888w\" sizes=\"auto, (max-width: 1192px) 100vw, 1192px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Let&#8217;s add a password and see if we can login ( the argument to add password is &gt;[your_password])<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>127.0.0.1:6379&gt; ACL SETUSER NEW_USER on N4b1l +get<\/code><\/pre>\n\n\n\n<p>Example:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-17-1024x187.png\" alt=\"\" class=\"wp-image-27278\" style=\"width:1171px;height:214px\" width=\"1171\" height=\"214\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-17-1024x187.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-17-300x55.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-17-768x141.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-17-1536x281.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-17.png 1694w\" sizes=\"auto, (max-width: 1171px) 100vw, 1171px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>We are able to login but still not able to use the &#8220;GET&#8221; command on the keys,let&#8217;s add the correct pattern <code>~<\/code>*  ( wildcard stands for all the keys )<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-19-1024x284.png\" alt=\"\" class=\"wp-image-27282\" style=\"width:1167px;height:323px\" width=\"1167\" height=\"323\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-19-1024x284.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-19-300x83.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-19-768x213.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-19.png 1371w\" sizes=\"auto, (max-width: 1167px) 100vw, 1167px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>That&#8217;s it, we can display the keys by using the &#8220;GET&#8221; command <\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Let&#8217;s try to add an element to the BESTPLAYERS key<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-20-1024x185.png\" alt=\"\" class=\"wp-image-27285\" style=\"width:1185px;height:214px\" width=\"1185\" height=\"214\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-20-1024x185.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-20-300x54.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-20-768x139.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-20-1536x278.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-20.png 1785w\" sizes=\"auto, (max-width: 1185px) 100vw, 1185px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Redis output indicate that we are not allowed to use the &#8220;<strong>SET<\/strong>&#8221; command<\/li>\n<\/ul>\n\n\n\n<p>We will add specific commands by using -@all followed by the command you want to enable ( here <strong>SET <\/strong>and also <strong>ACL <\/strong>command to have the whoami feature)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>127.0.0.1:6379&gt;  ACL SETUSER GUEST_USER -@all +get +acl +set<\/code><\/pre>\n\n\n\n<p>The command will give the right to user GUEST_USER for the command get for the &#8220;<strong>ACL&#8221; <\/strong>command and for the &#8220;<strong>SET<\/strong>&#8221; command<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>We can check also if the rights are set as expected :<\/li>\n<\/ul>\n\n\n\n<p>127.0.0.1:6379&gt; ACL GETUSER GUEST_USER<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"492\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-22-1024x492.png\" alt=\"\" class=\"wp-image-27289\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-22-1024x492.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-22-300x144.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-22-768x369.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-22.png 1481w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Try again to the pass the SET command<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"386\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-23-1024x386.png\" alt=\"\" class=\"wp-image-27291\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-23-1024x386.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-23-300x113.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-23-768x289.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-23.png 1304w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>It is working and also we are able to use &#8220;<strong>ACL WHOAMI&#8221; <\/strong>command to know what is our current user session.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusion <\/h2>\n\n\n\n<p>This is the end of the first part , now you know how and why you can use Redis ACL.<\/p>\n\n\n\n<p>You can enhance your database security by limiting the access to users in order to let them do only what they have to do.We know also how to list the users and see their right access level.<\/p>\n\n\n\n<p>Next time we will see how to give specific rights and also the different command categories.<\/p>\n\n\n\n<p>We will also see how to allow or block  sub-commands and even more security features \ud83d\ude42<\/p>\n\n\n\n<p>Don&#8217;t hesitate to view or review <a href=\"https:\/\/www.dbi-services.com\/blog\/author\/nabilsaoual\/\">my previous blogs<\/a> and also my colleagues <a href=\"https:\/\/www.dbi-services.com\/blog\/\">blogs<\/a>.<\/p>\n\n\n\n<p>Stay tuned for the part 2 of how to use Redis ACL \ud83d\ude09 .<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction: Security is an important matter when using or allowing access to your database.You need to be sure that nobody will harm your infrastructure by passing some dangerous commands. Aim is to limit the access to user to specifics rights when he will authenticate on the database. For that we will use the Redis ACL [&hellip;]<\/p>\n","protected":false},"author":40,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1739],"tags":[947,2991],"type_dbi":[],"class_list":["post-27222","post","type-post","status-publish","format-standard","hentry","category-nosql","tag-nosql","tag-redis"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Redis: Using Access Control List (ACL) part1 - dbi Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Redis: Using Access Control List (ACL) part1\" \/>\n<meta property=\"og:description\" content=\"Introduction: Security is an important matter when using or allowing access to your database.You need to be sure that nobody will harm your infrastructure by passing some dangerous commands. Aim is to limit the access to user to specifics rights when he will authenticate on the database. For that we will use the Redis ACL [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-15T16:32:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-15T16:32:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-4.png\" \/>\n<meta name=\"author\" content=\"Middleware Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Middleware Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/\"},\"author\":{\"name\":\"Middleware Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1\"},\"headline\":\"Redis: Using Access Control List (ACL) part1\",\"datePublished\":\"2023-08-15T16:32:57+00:00\",\"dateModified\":\"2023-08-15T16:32:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/\"},\"wordCount\":2193,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-4.png\",\"keywords\":[\"NoSQL\",\"Redis\"],\"articleSection\":[\"NoSQL\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/\",\"name\":\"Redis: Using Access Control List (ACL) part1 - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-4.png\",\"datePublished\":\"2023-08-15T16:32:57+00:00\",\"dateModified\":\"2023-08-15T16:32:58+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-4.png\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-4.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Redis: Using Access Control List (ACL) part1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1\",\"name\":\"Middleware Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"caption\":\"Middleware Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/middleware-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Redis: Using Access Control List (ACL) part1 - dbi Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/","og_locale":"en_US","og_type":"article","og_title":"Redis: Using Access Control List (ACL) part1","og_description":"Introduction: Security is an important matter when using or allowing access to your database.You need to be sure that nobody will harm your infrastructure by passing some dangerous commands. Aim is to limit the access to user to specifics rights when he will authenticate on the database. For that we will use the Redis ACL [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/","og_site_name":"dbi Blog","article_published_time":"2023-08-15T16:32:57+00:00","article_modified_time":"2023-08-15T16:32:58+00:00","og_image":[{"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-4.png","type":"","width":"","height":""}],"author":"Middleware Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Middleware Team","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/"},"author":{"name":"Middleware Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1"},"headline":"Redis: Using Access Control List (ACL) part1","datePublished":"2023-08-15T16:32:57+00:00","dateModified":"2023-08-15T16:32:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/"},"wordCount":2193,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-4.png","keywords":["NoSQL","Redis"],"articleSection":["NoSQL"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/","url":"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/","name":"Redis: Using Access Control List (ACL) part1 - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-4.png","datePublished":"2023-08-15T16:32:57+00:00","dateModified":"2023-08-15T16:32:58+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-4.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/08\/image-4.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/redis-using-access-control-list-acl-part1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Redis: Using Access Control List (ACL) part1"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1","name":"Middleware Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","caption":"Middleware Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/middleware-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/27222","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/40"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=27222"}],"version-history":[{"count":71,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/27222\/revisions"}],"predecessor-version":[{"id":27313,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/27222\/revisions\/27313"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=27222"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=27222"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=27222"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=27222"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}