权限规则
1. 在配有主从集群时建议在主节点上做权限相关操作
2. 只有管理员和超级管理员才有将数据导入至表中的权限
3. 管理员用户赋予的是以整表为单位的权限,所有能赋予的权限为create/select/truncate/delete/drop
4. 管理员建表需要超管授权后才能创建,即使这张表不存在,直接创建也是没有权限的;管理员只具备create权限时,创建表后默认具备select权限,show tables需要的权限与select一致,但从create衍生而来的select权限不予以显示
5. 普通用户只能赋予select的权限,具体分为列级权限columns和行级权限rows,其中行级权限需要以列级权限为基准,行级权限是对列级权限更进一步的限制,即只有行级权限是查看不到表数据的
6. 管理员用户对普通用户赋权是在管理员用户所拥有的权限基础上对普通用户赋权
7. 管理员用户所有赋权均为追加操作,可先赋予一个权限,之后再赋予其他权限
8. 普通用户只有赋予行级权限rows时为覆盖操作(行级权限一次只可赋予一行权限),以最后一次赋权信息为最终行级权限信息,赋予列级权限columns时为追加操作(列级权限可以按列进行赋权)
9. 管理员用户可一次回收一个或多个或所有权限,但普通用户只能一次回收所有列的查询权限,而不能一列一列的回收权限
10. 回收不存在的权限时会显示成功,但实际没有需要回收的权限信息
11. 如果操作失误赋予了不符合要求的权限信息,可以基于revoke对比操作失误输入的信息进行回收,不符合要求的权限信息不会生效,但会予以显示
用户操作
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. 管理员
管理员对普通用户的权限回收请参照超级管理员回收普通用户的指令。
LSQL提供超级管理员、管理员、普通用户三种权限,超级管理员拥有所有权限;支持表、行、列级别的权限控制,不同权限对应不同功能。
现在登陆LSQL官网:www.lucene.xin,还可以免费试用喔~
关注录信数软官方公众号,录信团队欢迎优秀的你!