# 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