中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

acl權限如何在zookeeper中進行配置

發布時間:2020-12-05 16:34:28 來源:億速云 閱讀:166 作者:Leah 欄目:編程語言

acl權限如何在zookeeper中進行配置?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

Zookeeper使用ACL來控制訪問Znode,ACL的實現和UNIX的實現非常相似:它采用權限位來控制那些操作被允許,那些操作被禁止。但是和標準的UNIX權限不同的是,Znode沒有限制用戶(user,即文件的所有者),組(group)和其他(world)。Zookeepr是沒有所有者的概念的。

每個ZNode的ACL是獨立的,且子節點不會繼承父節點的ACL。例如:Znode /app對于ip為172.16.16.1只有只讀權限,而/app/status是world可讀,那么任何人都可以獲取/app/status;所以在Zookeeper中權限是沒有繼承和傳遞關系的,每個Znode的權限都是獨立存在的。

Zookeeper支持可插拔的權限認證方案,分為三個維度:scheme,user,permission。通常表示為scheme:id,permissions,其中Scheme表示使用何種方式來進行訪問控制,Id代表用戶,Permission表示有什么權限。下面分別說說這三個維度:

ZooKeeper支持如下權限(permissions):

  · CREATE:可以創建子節點

  · READ:可以獲取該節點的數據,也可以讀取該節點所有的子節點。

  · WRITE:可以寫數據到該節點。

  · DELETE:可以刪除子節點。

   ·ADMIN:可以在該節點中設置權限。

簡單來說,zookeeper的這5種操作權限,CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、刪、改、查、管理權限,這5種權限簡寫為crwda(即:每個單詞的首字符縮寫)

注:這5種權限中,delete是指對子節點的刪除權限,其它4種權限指對自身節點的操作權限

內置的ACL Schemes:

world: 只有一個id:anyone,world:anyone表示任何人都有訪問權限,Zookeeper把任何人都有權限的節點都歸屬于world:anyone

auth:不需要任何id, 只要是通過auth的user都有權限

digest: 使用用戶名/密碼的方式驗證,采用username:BASE64(SHA1(password))的字符串作為ACL的ID

ip: 使用客戶端的IP地址作為ACL的ID,設置的時候可以設置一個ip段,比如ip:192.168.1.0/16, 表示匹配前16個bit的IP段

sasl:sasl的對應的id,是一個通過sasl authentication用戶的id,zookeeper-3.4.4中的sasl authentication是通過kerberos來實現的,也就是說用戶只有通過了kerberos認證,才能訪問它有權限的node.

如果需要實現自己定義的Scheme,可以實現org.apache.zookeeper.server.auth.AuthenticationProvider接口。

示例:

    @Test
	public void testAclServer() {
		List<ACL> acls = new ArrayList<ACL>(2);
		try {
			Id id1 = new Id("digest", DigestAuthenticationProvider.generateDigest("fish:fishpw"));
			ACL acl1 = new ACL(ZooDefs.Perms.WRITE, id1);
			Id id2 = new Id("digest", DigestAuthenticationProvider.generateDigest("qsd:qsdpw"));
			ACL acl2 = new ACL(ZooDefs.Perms.READ, id2);
			acls.add(acl1);
			acls.add(acl2);
			// 所有用戶都有權限
			// Id world = new Id("world", "anyone");
			// ACL worldAcl = new ACL(ZooDefs.Perms.READ, world);
			// acls.add(worldAcl);
			// 10.0.2.76是本機IP
			// Id id3 = new Id("ip", "10.0.2.76");
			// ACL acl3 = new ACL(ZooDefs.Perms.WRITE, id3);
			// acls.add(acl3);
		} catch (NoSuchAlgorithmException e1) {
			e1.printStackTrace();
		}
		ZooKeeper zk = null;
		try {
			zk = new ZooKeeper("10.0.1.75:2181,10.0.1.76:2181,10.0.1.77:2181", 300000, new Watcher() {
				// 監控所有被觸發的事件
				public void process(WatchedEvent event) {
					System.out.println("已經觸發了" + event.getType() + "事件!");
				}
			});
			if (zk.exists("/test", true) == null) {
				System.out.println(zk.create("/test", "ACL測試".getBytes(), acls, CreateMode.PERSISTENT));
			}
		} catch (IOException e) {
			e.printStackTrace();
		} catch (KeeperException e1) {
			e1.printStackTrace();
		} catch (InterruptedException e1) {
			e1.printStackTrace();
		}
	}
	@Test
	public void testAclClient() {
		try {
			ZooKeeper zk = new ZooKeeper("10.0.1.75:2181,10.0.1.76:2181,10.0.1.77:2181", 300000, new Watcher() {
				// 監控所有被觸發的事件
				public void process(WatchedEvent event) {
					System.out.println("已經觸發了" + event.getType() + "事件!");
				}
			});
			// 只有寫權限
			zk.addAuthInfo("digest", "fish:fishpw".getBytes());
			// 只有讀權限
			zk.addAuthInfo("digest", "qsd:qsdpw".getBytes());
			System.out.println(new String(zk.getData("/test", null, null)));
			zk.setData("/test", "I change!".getBytes(), -1);
		} catch (KeeperException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

看完上述內容,你們掌握acl權限如何在zookeeper中進行配置的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

澄江县| 上高县| 库车县| 胶南市| 西安市| 六枝特区| 连平县| 棋牌| 常德市| 诸暨市| 西安市| 连城县| 巫山县| 昌江| 乌兰浩特市| 防城港市| 汉中市| 隆尧县| 大悟县| 保靖县| 大关县| 潮安县| 达州市| 西盟| 夏河县| 漾濞| 谢通门县| 无极县| 屏东县| 韩城市| 深圳市| 莱州市| 库伦旗| 商洛市| 黔西| 潮州市| 望谟县| 河东区| 兰州市| 邹城市| 额尔古纳市|