0812-7.1.3-如何使用Ranger给HBase授权
文档编写目的
在前面的文章中,Fayson介绍了《如何使用Ranger 给HDFS 授权》,基于前面的集群环境和已有的用户信息,本篇文章Fayson主要介绍如何使用Ranger 给HBase 授权。
- 文档概述
1.介绍CDP7.1.3 中Ranger 中HBase默认权限策略
2.使用Ranger 给HBase 设置权限策略并验证
- 测试环境
1.操作系统Redhat7.6
2.CDP DC7.1.3
Ranger中HBase默认权限策略
使用admin用户登录http://cdp02.fayson.com:6080 页面,点击cm_hbase 进入该页面
在该页面中可以看到默认有两个策略,第一个是hbase 用户的策略,默认拥有所有目录所有权限,rangerlookup 拥有所有HBase读和Create的权限。
第二个策略是altas 用户拥有atlas_janus 和ATLAS_ENTITY_AUDIT_EVENTS 两个表的Read、Write、Create、admin权限策略,用于Atlas 服务安装初始化的使用,如果在HBase 中不存在这两个表,那么Atlas 服务则运行不正常。请勿随意修改这两个用户的权限策略。
使用Ranger 给HBase 设置权限策略并验证
3.1HBase授权
首先使用admin 用户登录Ranger 然后给fayson 用户授予与hbase 用户同样的权限,用于我们验证后面的多级授权策略
然后使用fayson 用户创建一个测试用的HBase Namespace 名为 testspace ,确认刚刚的授权已生效
hbase(main):004:0> create_namespace 'testspace'
hbase(main):005:0> list_namespace
然后使用 fayson 登录,给testuser1 用户授权所有权限与fayson 用户权限一致,并且给与Delegate Admin 权限,并保存。
3.2HBase多级授权以及拒绝条件策略
通过上面的步骤,我们使用fayson 用户给testuser1 授权了HBase的所有权限,然后使用进行testuser1在testspace下创建4个hbase表用于验证使用Ranger 给HBase 授权的4种策略。
hbase(main):004:0> create "testspace:Allow" ,"name"
hbase(main):005:0> create "testspace:ExcludeAllow", "name"
hbase(main):006:0> create "testspace:Deny", "name"
hbase(main):007:0> create "testspace:ExcludeDeny", "name"
验证1:Allow Conditions 验证,我们通过登录testuser1 创建权限策略testallow,给testuser2 授予Allow表的读、写、创建权限并验证。
然后使用testuser2 插入数据并查看验证Allow Conditions 已生效。
hbase(main):005:0> create "testspace:Allow" ,"name"
hbase(main):006:0> put 'testspace:Allow', 'rowKey1', 'name:column1', 'testuser2'
hbase(main):007:0> scan "testspace:Allow"
如需执行desc 查看,则需要给create 权限,否则执行desc ‘testspace:Allow’ 会如下提示:
验证2:Exclude from Allow Conditions 验证,使用testuser1 用户创建权限策略testExcludeAllow。在Allow Conditions给testuser2 授予ExcludeAllow表的读、写、创建权限,并且在Exclude from Allow Conditions 排除读的权限,如下图所示:
然后使用testuser2 插入ExcludeAllow数据并查看验证,验证Allow Conditions 和Exclude from Allow Conditions都已生效,并且Exclude 条件优先于Allow,因此得到的结果是testuser2 可以插入数据到ExcludeAllow表中,但是不能查看,验证如下图所示:
hbase(main):006:0> put 'testspace:ExcludeAllow, 'rowKey1', 'name:column1', 'testuser2'
hbase(main):007:0> scan "testspace:ExcludeAllow"
验证3:Deny Conditions 验证,使用testuser1创建策略 testDeny。在Allow Conditions给testuser2 授予Deny表的读、写、创建权限,并且在Deny Conditions种添加拒绝读的权限。如下图所示:
根据上面的权限策略,得到的结论与验证2的结果一致。testuser2 可以插入数据到Deny 表中,但是不能查看,验证如下图所示:
hbase(main):006:0> put 'testspace:Deny, 'rowKey1', 'name:column1', 'testuser2'
hbase(main):007:0> scan "testspace:Deny"
验证4:Exclude from Deny Conditions 验证,使用testuser1 用户创建权限策略testExcludeDeny。在Allow Conditions给testuser2 授予ExcludeAllow表的读、写、创建权限策略。在Deny Conditions 添加拒绝读、写的权限策略,并且在Exclude from Deny Conditions 排除拒绝写的权限策略,如下图所示:
根据上面的权限策略,得到的结论与验证2、3的结果一致。testuser2 可以插入数据到ExcludeDeny 表中,但是不能查看,验证如下图所示:
hbase(main):006:0> put 'testspace:ExcludeDeny, 'rowKey1', 'name:column1', 'testuser2'
hbase(main):007:0> scan "testspace:ExcludeDeny"
登录testuser1 验证上面所有的数据确认测试2-4使用testuser2都已正常写入
验证5:HBase column 级别授权 , 使用testuser1 用户创建权表testColumn,并put 数据
hbase(main):004:0> create "testspace:testColumn" ,"name","age"
hbase(main):005:0> desc "testspace:testColumn"
hbase(main):006:0> put 'testspace:testColumn', 'rowKey1', 'name:column1', 'testuser1'
hbase(main):007:0> put 'testspace:testColumn', 'rowKey1', 'age:column1', '20'
hbase(main):008:0> scan 'testspace:testColumn'
然后使用testuser1 用户创建权限策testColumn。只给testuser2 用户testColumn 表name 列的读写权限,如下图所示:
根据上面的权限策略,testuser2 可以插入数据到testColumn表name 列以及查看该列,其余的列不可查看以及写入,验证如下图所示:
查看验证,查看testColumn表的name 列有权限,查看age 列无权限
hbase(main):005:0> scan 'testspace:testColumn',{COLUMNS=>'name'}
hbase(main):006:0> scan 'testspace:testColumn',{COLUMNS=>'age'}
写入验证,写入testColumn表的name 列有权限,写入age 列无权限
hbase(main):006:0> put 'testspace:testColumn', 'rowKey1', 'name:column1', 'testuser2'
hbase(main):007:0> put 'testspace:testColumn', 'rowKey1', 'age:column1', '20'
- ImageButton与Button
- RadioButton、CheckBox与ToggleButton
- Silverlight学习(五)图形标绘
- radio与checkbox
- JavaScript之cookie
- Silverlight学习(四) domainservice动态多条件查询
- Android学习Tabhost、gallery、listview、imageswitcher
- ProgressBar、RatingBar和Spinner控件
- TimePicker控件、帧动画、补间动画
- Android学习之简单的数据存储
- Android学习之菜单
- Android简单登录系统
- android自定义控件
- 测试是浪费时间,我的程序肯定没问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux进程间通信方式之socket使用实例
- python实现图片识别汽车功能
- Mac下Anaconda的安装和使用教程
- linux ubuntu中安装、卸载和删除python-igraph的方法教程
- python实现汽车管理系统
- tp5框架基于ajax实现异步删除图片的方法示例
- Python3 jupyter notebook 服务器搭建过程
- PHP图像处理 imagestring添加图片水印与文字水印操作示例
- CentOS6.9下NFS服务安装配置教程
- Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
- PHP 枚举类型的管理与设计知识点总结
- Linux静态链接库使用类模板的快速排序算法
- TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
- php post换行的方法
- apache实现部署多个网站(一个ip部署多域名)的方法详解