Phoenix + Hbase 用户权限

本文详细介绍了HBase的授权配置步骤,包括启用安全授权、添加超级管理员、用户创建以及权限测试。同时,讲解了HBase ACLs的访问级别和授权范围。在Phoenix部分,讨论了权限设置、查询测试以及解决客户端报错的问题,特别是Namespace映射的配置。此外,还展示了如何创建和使用Schema。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一 Hbase 启用授权配置

1  hbase 开启安全授权

2 添加超级管理员配置

3 重启相关服务和部署客户端设置。

4 创建对应用户

二 HBase的 ACLs 权限控制说明

1 HBase ACLs的访问级别

2 HBase 授权范围

3 Hbase 权限授权测试

授权

查看权限:

收回权限

测试

三 Phoenix 权限

1 zhangxh用户启动客户端

2 修改权限

3 查询测试

四 Phoenix 映射Hbase NameSpace

1 修改两个配置

2 在cdh 界面操作重启并部署。

3 Phoenix 客户端报错解决

3.1 问题描述

3.2 问题解决

3.3 创建SChema (NameSpace)

3.4 删除Schema

3.5 使用schema

参考文档


一 Hbase 启用授权配置

1  hbase 开启安全授权

(1)Hbase -> 配置 -> 搜索 auth -> 勾选 HBase 安全授权 -> 保存更改

(2)  Hbase -> 配置 -> 高级 -> 搜索 hbase-site.xml -> 添加配置 -> 保存更改

<property> 
<name>hbase.security.exec.permission.checks</name> 
<value>true</value> 
</property>

2 添加超级管理员配置

Hbase -> 配置 -> 搜索 super -> 添加超级用户 -> 保存更改

如图所示,创建easydata_hbase 超级管理员用户。

3 重启相关服务和部署客户端设置。

4 创建对应用户

useradd easydata_hbase

Passwd easydata_hbase

HBase的 ACLs 权限控制说明

1 HBase ACLs的访问级别

权限

说明

Read(R)

可以读取给定范围内的数据

Write(W)

可以在给定范围内写入数据

Executor(X)

可以在给定范围内执行协处理器端点

Create(C)

可以在给定范围内创建表或删除表(甚至包括未创建的表)

Admin(A)

可以执行群集操作,例如平衡群集或在给定范围内分配区域

2 HBase 授权范围

权限

说明

Superuser

超级用户可以执行HBase中所有操作及任何资源(如:hbase用户)

Global

在全局范围内授予的权限,可以在超级管理下创建多种集群管理员

Namespace

在命名空间范围内授权,适用于命名空间内所有表

Table

表范围授权,适用于为指定表进行授权

ColumnFamily

ColumnFamily范围内授权

Cell

为指定的单元格进行授权

3 Hbase 权限授权测试

授权

可以通过 grant 命令为 USER、Group、NameSpace 等取消授权,语法如下:

grant <user> , <permissions> [, <@namespace>[, <table> [, <column family> [, <column qualifier>]]]]

查看权限:

# 语法:user_permission <table>

user_permission '.*'   -- 查看全部命名空间下全部表的全部权限

收回权限

与分配权限类似,语法:revoke <user> <table> <column family> <column qualifier>

(1)revoke 'root','SYSTEM:FUNCTION'   --收回root的SYSTEM:FUNCTION表的权限

(2)revoke 'zhangxh','@OUT_TEST'  -- 收回zhangxh 的OUT_TEST命名空间的全部权限

测试

(1)zhangxh未授权任何表之前

(2)对'USER'表进行读写授权

hbase(main):024:0> grant 'zhangxh','RW','USER'

grant 'dev' ,'RWXC','@DEV'

Took 0.0244 seconds  

(3)admin 权限测试

zhangxh 和 root 用户都没有A权限

easydata_hbase 测试

三 Phoenix 权限

1 zhangxh用户启动客户端

会报没有权限的相关错误。

2 修改权限

若想使用phoenix 必须保证具有SYSTEM:CATALOG、SYSTEM:STATS RWX的权限。

grant 'zhangxh','RWX','SYSTEM:STATS'

grant 'zhangxh','RWX','SYSTEM:CATALOG'

在对于赋予对于表和索引表的R权限。

3 查询测试

(1)select * from USER limit 10;

(2)select "cookie_id" from USER  where "cookie_id"='000036bd-9ede-4d2e';

由上图报错可知是因为该查询需要扫描USER_COOKIE_ID_INDEX 索引,而又没有该索引的读权限。

(3)grant 'zhangxh','R','USER_COOKIE_ID_INDEX' 授权后再次测试正常走索引进行查询

四 Phoenix 映射Hbase NameSpace

1 修改两个配置

2 在cdh 界面操作重启并部署。

3 Phoenix 客户端报错解决

3.1 问题描述

0: jdbc:phoenix:xxx:2181:/hbase> Error: ERROR 726 (43M10):  Inconsistent namespace mapping properties. Ensure that config phoenix.schema.isNamespaceMappingEnabled is consistent on client and server. (state=43M10,code=726)
java.sql.SQLException: ERROR 726 (43M10):  Inconsistent namespace mapping properties. Ensure that config phoenix.schema.isNamespaceMappingEnabled is consistent on client and server.
	at org.apache.phoenix.exception.SQLExceptionCode$Factory$1.newException(SQLExceptionCode.java:494)
	at org.apache.phoenix.exception.SQLExceptionInfo.buildException(SQLExceptionInfo.java:150)
	at org.apache.phoenix.query.ConnectionQueryServicesImpl.checkClientServerCompatibility(ConnectionQueryServicesImpl.java:1305)
	at org.apache.phoenix.query.ConnectionQueryServicesImpl.ensureTableCreated(ConnectionQueryServicesImpl.java:1154)
	at org.apache.phoenix.query.ConnectionQueryServicesImpl.createTable(ConnectionQueryServicesImpl.java:1491)
	at org.apache.phoenix.schema.MetaDataClient.createTableInternal(MetaDataClient.java:2717)
	at org.apache.phoenix.schema.MetaDataClient.createTable(MetaDataClient.java:1114)
	at org.apache.phoenix.compile.CreateTableCompiler$1.execute(CreateTableCompiler.java:192)
	at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:408)
	at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:391)
	at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
	at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:389)
	at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:378)
	at org.apache.phoenix.jdbc.PhoenixStatement.executeUpdate(PhoenixStatement.java:1806)
	at org.apache.phoenix.query.ConnectionQueryServicesImpl$12.call(ConnectionQueryServicesImpl.java:2528)
	at org.apache.phoenix.query.ConnectionQueryServicesImpl$12.call(ConnectionQueryServicesImpl.java:2491)
	at org.apache.phoenix.util.PhoenixContextExecutor.call(PhoenixContextExecutor.java:76)
	at org.apache.phoenix.query.ConnectionQueryServicesImpl.init(ConnectionQueryServicesImpl.java:2491)
	at org.apache.phoenix.jdbc.PhoenixDriver.getConnectionQueryServices(PhoenixDriver.java:255)
	at org.apache.phoenix.jdbc.PhoenixEmbeddedDriver.createConnection(PhoenixEmbeddedDriver.java:150)
	at org.apache.phoenix.jdbc.PhoenixDriver.connect(PhoenixDriver.java:221)
	at sqlline.DatabaseConnection.connect(DatabaseConnection.java:157)
	at sqlline.DatabaseConnection.getConnection(DatabaseConnection.java:203)
	at sqlline.Commands.close(Commands.java:906)
	at sqlline.Commands.closeall(Commands.java:880)
	at sqlline.SqlLine.begin(SqlLine.java:714)
	at sqlline.SqlLine.start(SqlLine.java:398)
	at sqlline.SqlLine.main(SqlLine.java:291)

从异常提示来看,提示客户端与服务端配置要相同,Ensure that config phoenix.schema.isNamespaceMappingEnabled is consistent on client and server,查看CDH中配置说明,提示应用所有服务角色配置,客户端配置除外,猜测客户端未加入该段代码。

3.2 问题解决

(1)下载客户端配置,复制到 phoenix bin 下;

(2)修改phoenix bin 下的hbase-site.xml 文件添加如下信息:

<property><name>phoenix.schema.isNamespaceMappingEnabled</name><value>true</value></property>
<property><name>phoenix.schema.mapSystemTablesToNamespace</name><value>true</value></property>

保存退出,重新连接即可

3.3 创建SChema (NameSpace)

Example:

CREATE SCHEMA IF NOT EXISTS my_schema
CREATE SCHEMA my_schema

CREATE SCHEMA IF NOT EXISTS OUT_TEST;

3.4 删除Schema

需要使用有admin 权限的用户操作。

3.5 使用schema

use OUT_TEST;

create  table schema_user (

. . . . . . . . > "session_id" varchar(100) not null primary key,

. . . . . . . . > "f"."cookie_id" varchar(100),

. . . . . . . . > "f"."visit_time" varchar(100),

. . . . . . . . > "f"."user_id" varchar(100),

. . . . . . . . > "f"."age" varchar(100),

. . . . . . . . > "f"."sex" varchar(100),

. . . . . . . . > "f"."visit_url" varchar(100),

. . . . . . . . > "f"."visit_os" varchar(100),

. . . . . . . . > "f"."browser_name" varchar(100),

. . . . . . . . > "f"."visit_ip" varchar(100),

. . . . . . . . > "f"."province" varchar(100),

. . . . . . . . > "f"."city" varchar(100),

. . . . . . . . > "f"."page_id" varchar(100),

. . . . . . . . > "f"."goods_id" varchar(100),

. . . . . . . . > "f"."shop_id" varchar(100)) column_encoded_bytes=0;

Hbase 已经在对应命名空间下创建对应表

参考文档

http://phoenix.apache.org/namspace_mapping.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值