1. No one can set root password expect for root user itself
2. NODE_PRIV cannot be granted.
3. ADMIN_PRIV and GRANT_PRIV can only be granted or revoked on *.*
4. No one can modifly privs of default role 'operator' and 'admin'.
5. No user can be granted to role 'operator'.
Fixed: the running load limit should not be applied to replay logic. It will cause replay or loading image fail.
Changed: optimize the problem of too many directories under mini load directory.
Fixed: missing password and auth check when handling mini load request in Frontend.
Fixed: DomainResolver should start after Frontends transfer to a certain ROLE, not in Catalog construction methods.
Fixed: a stupid bug that no one can set password for root user... fix it: only root user can set password for root.
Fixed: read null data twice
When reading data with a null value, in some cases, the same data will be read twice by the storage engine,
resulting in a wrong result.The reason for this problem is that when splitting,
and the start key is the minimum value, the data with null is read.
Fixed: add a flag to prevent DomainResovler thread start twice.
Fixed: fixed a mem leak of using ByteBuf when parsing auth info of http request.
Fixed: add a new config 'disable_hadoop_load', default is false, set to true to disable hadoop load.
Changed: add detail error msg of submitting hadoop load job in show load result.
Fixed: Backend process should be crashed if failed to saving header.
Added: exposure backend info to user when encounter error on Backend. for debugging it more convenient.
Fixed: Should remove fd from map when inputstream or outputstream is closed in Broker process.
Fixed: Change all files' LF to unix format.
Internal commit id: merge from dfcd0aca18eed9ff99d188eb3d01c60d419be1b8
335 lines
11 KiB
Markdown
335 lines
11 KiB
Markdown
# CREATE USER
|
|
## description
|
|
|
|
Syntax:
|
|
|
|
CREATE USER user_identity [IDENTIFIED BY 'password'] [DEFAULT ROLE 'role_name']
|
|
|
|
user_identity:
|
|
'user_name'@'host'
|
|
|
|
CREATE USER 命令用于创建一个 Palo 用户。在 Palo 中,一个 user_identity 唯一标识一个用户。user_identity 由两部分组成,user_name 和 host,其中 username 为用户名。host 标识用户端连接所在的主机地址。host 部分可以使用 % 进行模糊匹配。如果不指定 host,默认为 '%',即表示该用户可以从任意 host 连接到 Palo。
|
|
|
|
host 部分也可指定为 domain,语法为:'user_name'@['domain'],即使用中括号包围,则 Palo 会认为这个是一个 domain,并尝试解析其 ip 地址。目前仅支持百度内部的 BNS 解析。
|
|
|
|
如果指定了角色(ROLE),则会自动将该角色所拥有的权限赋予新创建的这个用户。如果不指定,则该用户默认没有任何权限。指定的 ROLE 必须已经存在。
|
|
|
|
## example
|
|
|
|
1. 创建一个无密码用户(不指定 host,则等价于 jack@'%')
|
|
|
|
CREATE USER 'jack';
|
|
|
|
2. 创建一个有密码用户,允许从 '172.10.1.10' 登陆
|
|
|
|
CREATE USER jack@'172.10.1.10' IDENTIFIED BY '123456';
|
|
|
|
3. 为了避免传递明文,用例2也可以使用下面的方式来创建
|
|
|
|
CREATE USER jack@'172.10.1.10' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';
|
|
|
|
后面加密的内容可以通过PASSWORD()获得到,例如:
|
|
|
|
SELECT PASSWORD('123456');
|
|
|
|
4. 创建一个允许从 '192.168' 子网登陆的用户,同时指定其角色为 example_role
|
|
|
|
CREATE USER 'jack'@'192.168.%' DEFAULT ROLE 'example_role';
|
|
|
|
5. 创建一个允许从域名 'example_domain' 登陆的用户
|
|
|
|
CREATE USER 'jack'@['example_domain'] IDENTIFIED BY '12345';
|
|
|
|
6. 创建一个用户,并指定一个角色
|
|
|
|
CREATE USER 'jack'@'%' IDENTIFIED BY '12345' DEFAULT ROLE 'my_role';
|
|
|
|
## keyword
|
|
CREATE, USER
|
|
|
|
# DROP USER
|
|
## description
|
|
|
|
Syntax:
|
|
|
|
DROP USER 'user_name'
|
|
|
|
DROP USER 命令会删除一个 palo 用户。这里 Palo 不支持删除指定的 user_identity。当删除一个指定用户后,该用户所对应的所有 user_identity 都会被删除。比如之前通过 CREATE USER 语句创建了 jack@'192.%' 以及 jack@['domain'] 两个用户,则在执行 DROP USER 'jack' 后,jack@'192.%' 以及 jack@['domain'] 都将被删除。
|
|
|
|
## example
|
|
|
|
1. 删除用户 jack
|
|
|
|
DROP USER 'jack'
|
|
|
|
## keyword
|
|
DROP, USER
|
|
|
|
# SET PASSWORD
|
|
## description
|
|
|
|
Syntax:
|
|
|
|
SET PASSWORD [FOR user_identity] =
|
|
[PASSWORD('plain password')]|['hashed password']
|
|
|
|
SET PASSWORD 命令可以用于修改一个用户的登录密码。如果 [FOR user_identity] 字段不存在,那么修改当前用户的密码。
|
|
|
|
注意这里的 user_identity 必须完全匹配在使用 CREATE USER 创建用户时指定的 user_identity,否则会报错用户不存在。如果不指定 user_identity,则当前用户为 'username'@'ip',这个当前用户,可能无法匹配任何 user_identity。可以通过 SHOW GRANTS 查看当前用户。
|
|
|
|
PASSWORD() 方式输入的是明文密码; 而直接使用字符串,需要传递的是已加密的密码。
|
|
如果修改其他用户的密码,需要具有管理员权限。
|
|
|
|
## example
|
|
|
|
1. 修改当前用户的密码
|
|
|
|
SET PASSWORD = PASSWORD('123456')
|
|
SET PASSWORD = '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9'
|
|
|
|
2. 修改指定用户密码
|
|
|
|
SET PASSWORD FOR 'jack'@'192.%' = PASSWORD('123456')
|
|
SET PASSWORD FOR 'jack'@['domain'] = '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9'
|
|
|
|
## keyword
|
|
SET, PASSWORD
|
|
|
|
# GRANT
|
|
## description
|
|
|
|
GRANT 命令用于赋予指定用户或角色指定的权限。
|
|
|
|
Syntax:
|
|
|
|
GRANT privilege_list ON db_name[.tbl_name] TO user_identity [ROLE role_name]
|
|
|
|
|
|
privilege_list 是需要赋予的权限列表,以逗号分隔。当前Palo支持如下权限:
|
|
|
|
NODE_PRIV:集群节点操作权限,包括节点上下线等操作,只有 root 用户有该权限,不可赋予其他用户。
|
|
ADMIN_PRIV:除 NODE_PRIV 以外的所有权限。
|
|
SELECT_PRIV:对指定的库或表的读取权限
|
|
LOAD_PRIV:对指定的库或表的导入权限
|
|
ALTER_PRIV:对指定的库或表的schema变更权限
|
|
CREATE_PRIV:对指定的库或表的创建权限
|
|
DROP_PRIV:对指定的库或表的删除权限
|
|
|
|
旧版权限中的 ALL 和 READ_WRITE 会被转换成:SELECT_PRIV,LOAD_PRIV,ALTER_PRIV,CREATE_PRIV,DROP_PRIV;
|
|
READ_ONLY 会被转换为 SELECT_PRIV。
|
|
|
|
db_name[.tbl_name] 支持以下三种形式:
|
|
|
|
1. *.* 权限可以应用于所有库及其中所有表
|
|
2. db.* 权限可以应用于指定库下的所有表
|
|
3. db.tbl 权限可以应用于指定库下的指定表
|
|
|
|
这里指定的库或表可以是不存在的库和表。
|
|
|
|
user_identity:
|
|
|
|
这里的 user_identity 语法同 CREATE USER。且必须为使用 CREATE USER 创建过的 user_identity。user_identity 中的host可以是域名,如果是域名的话,权限的生效时间可能会有1分钟左右的延迟。
|
|
|
|
也可以将权限赋予指定的 ROLE,如果指定的 ROLE 不存在,则会自动创建。
|
|
|
|
## example
|
|
|
|
1. 授予所有库和表的权限给用户
|
|
|
|
GRANT SELECT_PRIV ON *.* TO 'jack'@'%';
|
|
|
|
2. 授予指定库表的权限给用户
|
|
|
|
GRANT SELECT_PRIV,ALTER_PRIVS,LOAD_PRIV ON db1.tbl1 TO 'jack'@'192.8.%';
|
|
|
|
3. 授予指定库表的权限给角色
|
|
|
|
GRANT LOAD_PRIV ON db1.* TO ROLE my_role;
|
|
|
|
## keyword
|
|
GRANT
|
|
|
|
# REVOKE
|
|
## description
|
|
|
|
REVOKE 命令用于撤销指定用户或角色指定的权限。
|
|
Syntax:
|
|
REVOKE privilege_list ON db_name[.tbl_name] FROM user_identity [ROLE role_name]
|
|
|
|
user_identity:
|
|
|
|
这里的 user_identity 语法同 CREATE USER。且必须为使用 CREATE USER 创建过的 user_identity。user_identity 中的host可以是域名,如果是域名的话,权限的撤销时间可能会有1分钟左右的延迟。
|
|
|
|
也可以撤销指定的 ROLE 的权限,执行的 ROLE 必须存在。
|
|
|
|
## example
|
|
|
|
1. 撤销用户 jack 数据库 testDb 的权限
|
|
|
|
REVOKE SELECT_PRIV ON db1.* FROM 'jack'@'192.%';
|
|
|
|
## keyword
|
|
|
|
REVOKE
|
|
|
|
# SET PROPERTY
|
|
## description
|
|
|
|
Syntax:
|
|
|
|
SET PROPERTY [FOR 'user'] 'key' = 'value' [, 'key' = 'value']
|
|
|
|
设置用户的属性,包括分配给用户的资源、导入cluster等。这里设置的用户属性,是针对 user 的,而不是 user_identity。即假设通过 CREATE USER 语句创建了两个用户 'jack'@'%' 和 'jack'@'192.%',则使用 SET PROPERTY 语句,只能针对 jack 这个用户,而不是 'jack'@'%' 或 'jack'@'192.%'
|
|
|
|
导入 cluster 仅适用于百度内部用户。
|
|
|
|
key:
|
|
|
|
超级用户权限:
|
|
max_user_connections: 最大连接数。
|
|
resource.cpu_share: cpu资源分配。
|
|
load_cluster.{cluster_name}.priority: 为指定的cluster分配优先级,可以为 HIGH 或 NORMAL
|
|
|
|
普通用户权限:
|
|
quota.normal: normal级别的资源分配。
|
|
quota.high: high级别的资源分配。
|
|
quota.low: low级别的资源分配。
|
|
|
|
load_cluster.{cluster_name}.hadoop_palo_path: palo使用的hadoop目录,需要存放etl程序及etl生成的中间数据供palo导入。导入完成后会自动清理中间数据,etl程序自动保留下次使用。
|
|
load_cluster.{cluster_name}.hadoop_configs: hadoop的配置,其中fs.default.name、mapred.job.tracker、hadoop.job.ugi必须填写。
|
|
load_cluster.{cluster_name}.hadoop_http_port: hadoop hdfs name node http端口。其中 hdfs 默认为8070,afs 默认 8010。
|
|
default_load_cluster: 默认的导入cluster。
|
|
|
|
## example
|
|
|
|
1. 修改用户 jack 最大连接数为1000
|
|
SET PROPERTY FOR 'jack' 'max_user_connections' = '1000';
|
|
|
|
2. 修改用户 jack 的cpu_share为1000
|
|
SET PROPERTY FOR 'jack' 'resource.cpu_share' = '1000';
|
|
|
|
3. 修改 jack 用户的normal组的权重
|
|
SET PROPERTY FOR 'jack' 'quota.normal' = '400';
|
|
|
|
4. 为用户 jack 添加导入cluster
|
|
SET PROPERTY FOR 'jack'
|
|
'load_cluster.{cluster_name}.hadoop_palo_path' = '/user/palo/palo_path',
|
|
'load_cluster.{cluster_name}.hadoop_configs' = 'fs.default.name=hdfs://dpp.cluster.com:port;mapred.job.tracker=dpp.cluster.com:port;hadoop.job.ugi=user,password;mapred.job.queue.name=job_queue_name_in_hadoop;mapred.job.priority=HIGH;';
|
|
|
|
5. 删除用户 jack 下的导入cluster。
|
|
SET PROPERTY FOR 'jack' 'load_cluster.{cluster_name}' = '';
|
|
|
|
6. 修改用户 jack 默认的导入cluster
|
|
SET PROPERTY FOR 'jack' 'default_load_cluster' = '{cluster_name}';
|
|
|
|
7. 修改用户 jack 的集群优先级为 HIGH
|
|
SET PROPERTY FOR 'jack' 'load_cluster.{cluster_name}.priority' = 'HIGH';
|
|
|
|
## keyword
|
|
SET, PROPERTY
|
|
|
|
# CREATE ROLE
|
|
|
|
## description
|
|
该语句用户创建一个角色
|
|
|
|
语法:
|
|
CREATE ROLE role1;
|
|
|
|
该语句创建一个无权限的角色,可以后续通过 GRANT 命令赋予该角色权限。
|
|
|
|
## example
|
|
|
|
1. 创建一个角色
|
|
|
|
CREATE ROLE role1;
|
|
|
|
## keyword
|
|
CREATE, ROLE
|
|
|
|
|
|
# DROP ROLE
|
|
|
|
## description
|
|
该语句用户删除一个角色
|
|
|
|
语法:
|
|
DROP ROLE role1;
|
|
|
|
删除一个角色,不会影响之前属于该角色的用户的权限。仅相当于将该角色与用户解耦。用户已经从该角色中获取到的权限,不会改变。
|
|
|
|
## example
|
|
|
|
1. 删除一个角色
|
|
|
|
DROP ROLE role1;
|
|
|
|
## keyword
|
|
DROP, ROLE
|
|
|
|
# SHOW ROLES
|
|
|
|
## description
|
|
该语句用于展示所有已创建的角色信息,包括角色名称,包含的用户以及权限。
|
|
|
|
语法:
|
|
SHOW ROLES;
|
|
|
|
## example
|
|
|
|
1. 查看已创建的角色:
|
|
|
|
SHOW ROELS;
|
|
|
|
## keyword
|
|
SHOW,ROLES
|
|
|
|
## description
|
|
该语句用户删除一个角色
|
|
|
|
语法:
|
|
DROP ROLE role1;
|
|
|
|
删除一个角色,不会影响之前属于该角色的用户的权限。仅相当于将该角色与用户解耦。用户已经从该角色中获取到的权限,不会改变。
|
|
|
|
## example
|
|
|
|
1. 删除一个角色
|
|
|
|
DROP ROLE role1;
|
|
|
|
## keyword
|
|
DROP, ROLE
|
|
|
|
# SHOW GRANTS
|
|
|
|
## description
|
|
|
|
该语句用于查看用户权限。
|
|
|
|
语法:
|
|
SHOW [ALL] GRANTS [FOR user_identity];
|
|
|
|
说明:
|
|
1. SHOW ALL GRANTS 可以查看所有用户的权限。
|
|
2. 如果指定 user_identity,则查看该指定用户的权限。且该 user_identity 必须为通过 CREATE USER 命令创建的。
|
|
3. 如果不指定 user_identity,则查看当前用户的权限。
|
|
|
|
|
|
## example
|
|
|
|
1. 查看所有用户权限信息
|
|
|
|
SHOW ALL GRANTS;
|
|
|
|
2. 查看指定 user 的权限
|
|
|
|
SHOW GRANTS FOR jack@'%';
|
|
|
|
3. 查看当前用户的权限
|
|
|
|
SHOW GRANTS;
|
|
|
|
## keyword
|
|
SHOW, GRANTS
|