权限管理
PALO 的权限管理系统参照了 Mysql 的权限管理机制,做到了表级别细粒度的权限控制,并且支持白名单机制。
名词解释
-
用户标识
user_identity
在权限系统中,一个用户被识别为一个
User Identity
(用户标识)。用户标识由两部分组成:username
和userhost
。其中username
为用户名,由英文大小写组成。userhost
表示该用户链接来自的 IP。user_identity
以username@'userhost'
的方式呈现,表示来自userhost
的username
。user_identity
的另一种表现方式为username@['domain']
,其中domain
为域名,可以通过 DNS 或 BNS(百度名字服务)解析为一组 ip。最终表现为一组username@'userhost'
,所以后面我们统一使用username@'userhost'
来表示。 -
权限
Privilege
权限作用的对象是节点、数据库、表或资源。不同的权限代表不同的操作许可。
-
角色
Role
PALO 可以创建自定义命名的角色。角色可以被看做是一组权限的集合。新创建的用户可以被赋予某一角色,则自动被赋予该角色所拥有的权限。后续对角色的权限变更,也会体现在所有属于该角色的用户权限上。
-
用户属性
user_property
用户属性直接附属于某一用户,而不是用户标识。即
cmy@'192.%'
和cmy@['domain']
都拥有同一组用户属性,该属性属于用户cmy
,而不是cmy@'192.%'
或cmy@['domain']
。用户属性包括但不限于: 用户最大连接数、导入集群配置等等。
支持的操作
- 创建用户:CREATE USER
- 删除用户:DROP USER
- 授权:GRANT
- 撤权:REVOKE
- 创建角色:CREATE ROLE
- 删除角色:DROP ROLE
- 查看用户权限:SHOW GRANTS
- 查看已创建的角色:SHOW ROLES
- 查看用户属性:SHOW PROPERTY
- 设置用户属性:SET PROPERTY
权限说明
PALO 目前支持以下几种权限:
-
Node_priv
节点变更权限。包括 FE、BE、BROKER 节点的添加、删除、下线等操作。目前该权限只能授予 Root 用户。
-
Grant_priv
权限变更权限。允许执行包括授权、撤权、添加/删除/变更 用户/角色 等操作。
-
Select_priv
对数据库、表的只读权限。
-
Load_priv
对数据库、表的写权限。包括 Load、Insert、Delete 等。
-
Alter_priv
对数据库、表的更改权限。包括重命名 库/表、添加/删除/变更 列等操作。
-
Create_priv
创建数据库、表的权限。
-
Drop_priv
删除数据库、表的权限。
-
Usage_priv
使用某种 资源 的权限。
典型实践
-
PALO 初始化时,会自动创建如下用户和角色:
- admin 角色:该角色拥有 Admin_priv,即除节点变更以外的所有权限。
- admin@'%':admin 用户,允许从任意节点登录,角色为 admin。
- 不支持删除或更改默认创建的角色或用户的权限。
- admin 角色的用户可以创建多个。
-
一些可能产生冲突的操作说明
-
域名与ip冲突:
假设创建了如下用户:
CREATE USER cmy@['domain'];
并且授权:
GRANT SELECT_PRIV ON *.* TO cmy@['domain']
该 domain 被解析为两个 ip:ip1 和 ip2
假设之后,我们对
cmy@'ip1'
进行一次单独授权:GRANT ALTER_PRIV ON *.* TO cmy@'ip1';
则
cmy@'ip1'
的权限会被修改为SELECT_PRIV, ALTER_PRIV
。并且当我们再次变更cmy@['domain']
的权限时,cmy@'ip1'
也不会跟随改变。 -
重复ip冲突:
假设创建了如下用户:
CREATE USER cmy@'%' IDENTIFIED BY "12345"; CREATE USER cmy@'192.%' IDENTIFIED BY "abcde";
在优先级上,
'192.%'
优先于'%'
。因此,当用户cmy
从192.168.1.1
这台机器尝试使用密码'12345'
登录 PALO 会被拒绝。
-
-
忘记密码
公有云用户可以 重置管理员密码。
登录后,可以通过 SET PASSWORD 命令重置密码。