亚洲成a人片在线观看69,中文字幕免费无线观看,日韩精品无码一区二区三区四区,92精品国产自产在线观看直播,亚洲精品无码不卡在线观看屁,亚洲成av人片在www色猫咪

【Redis源碼】Redis 6 ACL源碼詳解

簡(jiǎn)介

本文主要是講解Redis 6的ACL的實(shí)現原理?;臼褂迷斠?jiàn):Redis 6.0新特性——ACLs,以及Redis啟動(dòng)過(guò)程分析。

啟動(dòng)初始化

初始化默認用戶(hù)

ACL子模塊在Redis啟動(dòng)過(guò)程中初始化,下面代碼主要是初始化ACL的結構:

/* 
 * 初始化ACL子系統
 * */
void ACLInit(void) {
    Users = raxNew(); // 初始化用戶(hù)信息
    UsersToLoad = listCreate();
    ACLLog = listCreate();
    ACLInitDefaultUser();
    server.requirepass = NULL; /* Only used for backward compatibility. */
}

ACLInitDefaultUser函數主要是初始化默認用戶(hù),在Redis 6當中默認用戶(hù)的權限就相當于操作系統的管理員一樣,擁有很大的權限,要限制遠程使用默認用戶(hù)連接。

/* 初始化默認用戶(hù) */
void ACLInitDefaultUser(void) {
    DefaultUser = ACLCreateUser("default",7);
    ACLSetUser(DefaultUser,"+@all",-1); // 默認用戶(hù)賦予所有命令的權限
    ACLSetUser(DefaultUser,"~*",-1);// 可以操作任何key
    ACLSetUser(DefaultUser,"on",-1);// 默認開(kāi)啟
    ACLSetUser(DefaultUser,"nopass",-1); // 默認不需要密碼
}

加載ACL用戶(hù)信息

ACL數據結構初始化完成之后,通過(guò)函數 ACLLoadUsersAtStartup加載Redis配置里面的ACL用戶(hù)信息。Redis ACL配置信息主要有兩種方式:

  • 在redis.conf文件中通過(guò)user 配置項配置的ACL信息。比如:user worker +@list +@connection ~jobs:* on >ffa9203c493aa99
  • redis.conf中配置aclfile所配置的文件中。格式如下圖所示:

圖片

通過(guò)user方式

通過(guò)加載redis.conf配置文件中讀取user配置項加載ACL信息。

int ACLLoadConfiguredUsers(void) {
    listIter li;
    listNode *ln;
    listRewind(UsersToLoad,&li);
    while ((ln = listNext(&li)) != NULL) {
        sds *aclrules = listNodeValue(ln);
        sds username = aclrules[0];

        // 檢查ACL用戶(hù)名當中是否存在空格
        if (ACLStringHasSpaces(aclrules[0],sdslen(aclrules[0]))) {
            serverLog(LL_WARNING,"Spaces not allowed in ACL usernames");
            return C_ERR;
        }
        // 創(chuàng  )建ACL用戶(hù)
        user *u = ACLCreateUser(username,sdslen(username));
        if (!u) {
            u = ACLGetUserByName(username,sdslen(username));
            serverAssert(u != NULL);
            ACLSetUser(u,"reset",-1);
        }

        /* Load every rule defined for this user. */
        for (int j = 1; aclrules[j]; j++) {
            // 添加當前用戶(hù)的所有屬性
            if (ACLSetUser(u,aclrules[j],sdslen(aclrules[j])) != C_OK) {
                char *errmsg = ACLSetUserStringError();
                serverLog(LL_WARNING,"Error loading ACL rule '%s' for "
                                     "the user named '%s': %s",
                          aclrules[j],aclrules[0],errmsg);
                return C_ERR;
            }
        }

        /* Having a disabled user in the configuration may be an error,
         * warn about it without returning any error to the caller.
         * 用戶(hù)沒(méi)有開(kāi)啟的時(shí)候打印到日志里面
         * */
        if (u->flags & USER_FLAG_DISABLED) {
            serverLog(LL_NOTICE, "The user '%s' is disabled (there is no "
                                 "'on' modifier in the user description). Make "
                                 "sure this is not a configuration error.",
                      aclrules[0]);
        }
    }
    return C_OK;
}

通過(guò)文件方式

ACLLoadFromFile函數就是從redis.conf配置的 aclfile所在的文件當中讀取ACL配置信息。

ACL 控制

ACL控制主要是在從命令表中獲取命令之后判斷當前登錄的用戶(hù)是否對當前執行的命令是否有權限。判斷的函數為:

int ACLCheckCommandPerm(client *c, int *keyidxptr) 

具體判斷是否存在權限的函數為ACLGetUserCommandBit,主要實(shí)現如代碼,其中id表示當前命令所對應的id。

int ACLGetUserCommandBit(user *u, unsigned long id) {
    uint64_t word, bit;
    // 計算命令在allowed_commands當中對應的bit位
    if (ACLGetCommandBitCoordinates(id,&word,&bit) == C_ERR) return 0;
    return (u->allowed_commands[word] & bit) != 0;
}



標 題:《【Redis源碼】Redis 6 ACL源碼詳解
作 者:zeekling
提 示:轉載請注明文章轉載自個(gè)人博客:浪浪山旁那個(gè)村

評論

取消
亚洲成a人片在线观看69,中文字幕免费无线观看,日韩精品无码一区二区三区四区,92精品国产自产在线观看直播,亚洲精品无码不卡在线观看屁,亚洲成av人片在www色猫咪 日韩精品久久久涩涩网址| 狠狠做深爱婷婷久久综合一区| 亚洲有码在线观看| 色欧美亚洲另类久久综合二区| 无码专区在线观看韩国| 中文字幕乱码视频网| 亚洲同性猛男毛片| 亚洲精品无码专区久久久| 中文字幕人妻伦伦| 亚洲欧美国产91综合在线| 亚洲第一在线大黄网站| 亚洲欧美日韩在线综合福利| 亚洲第一的桃色大国韩国| 中文字幕一永久免费观看电视剧| 亚洲综合黄色片一边揉一边操| 亚洲熟女中文字幕男人总| 亚洲国产日韩欧美在线a| 国产亚洲日韩欧美不卡成人| 亚洲精品色青久久久久久久| 亚洲国产精品成人天堂| 伊人久久精品av无码一区| 亚亚洲乱码一二三四区| 永久免费毛片在线播放| 国产农村妇女精品一二区| 一级毛片在线免费播放| 国产成人a视频高清在线观看| 中文免费手机在线观看| 亚洲大尺度av无码专区| 国产人成视频在线观看| 在线观看免费精品国白产| 亚洲蜜臀AV乱码久久精品蜜桃| 亚洲欧美精品成人久久91| 中文字幕日韩欧美中文字幕在线| 在线观看免费人成视频| 亚洲AV无码久久一区二区| 亚洲一区在线免费观看| 亚洲黄色在线视频| 国产国产精品人在线视| 国产欧美精品国产国产专区| 国产亚洲成aV人综合在线观看| 在线观看亚洲精品自拍| http://xmrthy.com http://qqjib.com http://938223.com http://coolsap.com http://simishejiao.com http://dzertong.com