目录
一 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