版权声明:本文为博主原创文章,未经博主允许不得转载。 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…..