1. 创建用户
操作指令中会举例说明SQL具体语法。
注:以下操作请保证在主节点(primary)进行操作,从节点(standby)会自动同步用户权限信息,如果在从节点操作,主节点在内存中的用户权限信息会与HDFS中文件保存的用户权限信息不一致,需要在主节点上重复操作。
用户一共分为三类:超级管理员、管理员以及普通用户。
a.创建管理员
create admin user 用户名identified by ‘密码’;
create admin user rovisuk identified by ‘qwerty’;
b.创建普通用户
create user 用户名 identified by '密码';
create user rktest identified by ‘qwerty’;
c.删除用户,只有超级管理员有权限删除用户
所有类别用户均使用此语法,超级管理员无法删除
drop user 用户名;
drop user rovisuk;
drop user rktest;
以上操作需要在超管root使用beeline登录LSQL完成,创建管理员成功之后的JDBC连接就需要通过密码来访问了,例:
connection conn = DriverManager.getConnection("jdbc:hive2://master:10009/default", "rovisuk", "123456");
2. 查看用户权限
a.查看当前所有用户,以及用户类别,所有用户类别均有权限查看
show users;
b.查看某个用户当前所拥有的权限,所有用户类别均有权限查看,超管权限拥有别权限,不予显示,没有的权限显示为NULL
show grant user 用户名;
#管理员显示包含表名以及对整表的权限
show grant user rovisuk;
#普通用户显示包含表名,列名和行的权限
show grant user rktest;
3. 修改密码
a.每个用户都可以修改自己的密码,但只有超级管理员才能修改其他用户的密码
alter user 用户名 identified by ‘密码’;
alter user rovisuk identified by '123456';
alter user rktest identified by '123456';
1. 超级管理员
(1) 对管理员
a.赋予一张或多张表或所有表的所有权限,具体权限信息查看权限规则
grant all[.*] table1[table1,table2,…,tableN][all][.*] to admin user 用户名;
grant all pri_tb1 to admin user rovisuk;
grant all pri_tb1,pri_tb2 to admin user rovisuk;
grant all all to admin user rovisuk;
b.赋予以pri为前缀名的所有表所有权限,此处只能使用.*匹配
grant all pri.* to admin user 用户名;
c.只赋予一张或多张表某个或多个权限
grant type1[type1,type2,…,typeN] table1[table1,table2,…,tableN] to admin user 用户名;
grant create[select][truncate][delete][drop] pri_tb1 to admin user rovisuk;
grant create,select[truncate][delete][drop] pri_tb1,pri_tb2 to admin user rovisuk;
(2) 对普通用户
a.赋予一张表或多张表或所有表的一列或多列或所有列的查询权限,所有列省略写
grant select table1,table2,…,tableN[all] column1,column2,…,columnM[省略] to user rktest;
grant select pri_tb1 col1,col2 to user rktest;
grant select pri_tb1 to user rktest;
grant select all to user rktest;
b.赋予一张表或多张表的某一行权限,注意,需要结合列级权限进行赋权,如果未赋予列级权限直接赋予行级权限,用户仍然查询不到数据
grant rows on table1,table2,…tableN to user rktest where 列名=值;
grant rows on pri_tb1,pri_tb2 to user rktest where col1=1;
2. 管理员
(1) 对普通用户
a.创建用户
create user rk identified by '123456';
b.赋予一张表或多张表,某列或多列中一行的权限
grant select all to user rk;
grant select table1,table2,…,tableN to user rk;
grant select table1 column1,column2,…,columnM to user rk;
grant select table1,table2,…,tableN column1,column2,…,columnM to user rk;
grant rows on pri_tb1 to user rk where col1=6;
1. 超级管理员
(1) 对管理员
a.回收一张表或多张表或所有表某个或多个或所有权限
revoke type1,type2,…,typeN[all][.*] table1,table2,…,tableN[all] from admin user rovisuk;
revoke all pri_tb1 from admin user rovisuk;
revoke create[select][truncate][delete][drop] pri_tb1 from admin user rovisuk;
revoke create,select pri_tb1,pri_tb2 from admin user rovisuk;
revoke all all from admin user rovisuk;
(2) 对普通用户
a.回收所有表的查询权限
revoke select all from user 用户名;
b.只回收一张表或多张表的查询权限,收回列级权限后,就无法再进行查询
revoke select table1,table2,…,tableN from user 用户名;
c.只回收行级查询权限,保留列级查询权限
revoke rows on table1,table2,…tableN from user 用户名;
2. 管理员
管理员对普通用户的权限回收请参照超级管理员回收普通用户的指令。