zookeeper之权限控制(ACL)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lixiaogang_theanswer/article/details/82470426

1.权限控制
zookeeper集群中,通常是由一个统一的zookeeper集群来为若干个应用提供服务。而此时,各应用之间不存在数据的共享操作场景。因此为了避免zookeeper服务器上的数据资源被其他进程意外操作修改,需要解决不同应用之间的权限问题 。即对zookeeper服务器上的数据访问进行权限控制(Access Control)。Zookeeper支持并提供了该功能,即通过设置zookeeper服务器上数据节点的ACL,来达到客户端对该zookeeper服务器上对应数据节点的访问权限。这类似于“电脑开机密码,只有知道该密码的人才能对该电脑进行操作”。

2.权限控制模式
zookeeper提供了多种权限控制模式(Scheme),分别是:world、auth、digest、ip、super。如下表:

参数名 说明 控制模式分类
scheme 权限控制模式 world、 auth、 digest、 ip、super

zookeeper C API中与ACL相关联的结构体数据和常量如下:

(1)结构体定义

struct Id {
    char * scheme;  //控制权限策略
    char * id;      //设置的权限ACL值
};

struct ACL {
    int32_t perms;
    struct Id id;
};

struct ACL_vector {
    int32_t count;     //ACL数量
    struct ACL *data;  //ACL控制权限

};

(2)与ACL IDs相关联的常量

/////////////////////////// 与ACL IDs相关的常量 ////////////////////////////
struct Id ZOO_ANYONE_ID_UNSAFE = {"world", "anyone"};
struct Id ZOO_AUTH_IDS = {"auth", ""};

(3)zookeeper中三个标准的ACL


static struct ACL _OPEN_ACL_UNSAFE_ACL[] = {{0x1f, {"world", "anyone"}}};
static struct ACL _READ_ACL_UNSAFE_ACL[] = {{0x01, {"world", "anyone"}}};
static struct ACL _CREATOR_ALL_ACL_ACL[] = {{0x1f, {"auth", ""}}};

////////////////////////// zookeeper中三个标准的ACL ///////////////////////
struct ACL_vector ZOO_OPEN_ACL_UNSAFE = { 1, _OPEN_ACL_UNSAFE_ACL};
struct ACL_vector ZOO_READ_ACL_UNSAFE = { 1, _READ_ACL_UNSAFE_ACL};
struct ACL_vector ZOO_CREATOR_ALL_ACL = { 1, _CREATOR_ALL_ACL_ACL};

TO DO…..

猜你喜欢

转载自blog.csdn.net/lixiaogang_theanswer/article/details/82470426