由于数据库用于多个部门,每个人都可以对数据库进行增删改查,需要对数据库的操作进行权限限制。
- 在hue界面创建登录用户hivetest
- 在hive-site.xml的Hive和HiveServer2高级配置中添加配置
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.security.authorization.createtable.owner.grants</name>
<value>ALL</value>
</property>
<property>
<name>hive.security.authorization.task.factory</name>
<value>org.apache.hadoop.hive.ql.parse.authorization.HiveAuthorizationTaskFactoryImpl</value>
</property>
- 给集群服务器添加用户(集群节点都要添加)
useradd hivetest 这里是创建hivetest用户
passwd hivetest 这里是给hivetest用户进行密码的设置。
重启hive服务
然后打开hive的客户端,在客户端上面执行如下命令:
CREATE ROLE hivetest;(创建数据库角色)
GRANT ROLE hivetest TO USER hivetest;(将数据库角色赋予用户)
GRANT CREATE ON DATABASE test TO role hivetest;(给角色test库的建表权限) 这里执行是给数据库test赋予创建表的权限。这里的数据库test自己提前创建好。
GRANT SELECT ON DATABASE test TO role hivetest;(给查询权限) 这里赋予数据库test查询的执行的权限。
grant ALL ON DATABASE test TO USER hivetest; 这里是将所有的权限给数据库test,他的用户的hivetest。
当然了这里既然可以进行赋予权限当然也可以进行撤回权限。
REVOKE ALL on database test from user hivetest;(收回权限) 但是这里的权限一旦你只赋予一部分的权限给数据库test是撤回不了的。具体的报错如下;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoo
从上面的截图中可以看出只有赋予全部权限的时候才能将权限撤回来,要不然报错。
我们也可以查看给hivetest角色赋予的权限:
这里我们能看到我们赋予角色创建和查询的权限。然后登陆hue的客户端进行试验。确实是可以进行查询和创建的。为了试一下能不能正真的控制权限我将全部的权限撤回来。然后只给这个角色查询的权限。但是报错。
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoo
还是报这个错,最后的解决办法是将创建的的角色bigdata删除掉,然后重新创建。然后再执行命令就可以了。就是这么简单。
这次只给hivetest用户操作hive数据库test的查询权限。创建权限是没有给,然后测试效果如下:
这里显示是没有创建数据的权限的,至此给一个用户操作数据的权限的赋予完成。