数据库管理
用户管理
要创建、管理和删除集群的用户,可以使用bini user及其子命令。当然,也可以使用CREATE USER和DROP USER语句创建和删除用户。
注意事项:
- 用户名不区分大小写;必须以字母或下划线开头;必须仅包含字母,数字或下划线;且必须介于1到63个字符之间。
- 创建用户之后,需要向他们授予数据库和表的权限。
- 所有用户都属于该public角色,可以向其授予和撤消权限。
- 安全模式的群集上,必须为用户创建客户端证书,并且用户必须验证其对群集的访问权限。
- 删除用户之前必须删除该用户的所有权限。
CREATE USER
CREATE USER 语句用于创建SQL用户,可以控制数据库和表的权限。
需要注意,用户只能由超级用户(即admin角色组成员)创建。默认情况下,root属于admin用户。
语法格式
有关创建用户的语法格式如下:
不使用IF NOT EXISTS,若不存在要创建的用户名称,则创建用户;否则会提示用户已存在。
使用IF NOT EXISTS,若不存在要创建的用户名称,则创建用户;否则不会报错。
参数说明
name
要创建的用户名,用户名不区分大小写;必须以字母或下划线开头;必须仅包含字母,数字或下划线;且必须介于1到63个字符之间。
password
用户密码。让用户使用此密码验证对安全集群的访问。密码必须作为字符串值输入,并用单引号(’)括起来。仅非root用户的安全群集中支持密码创建。该root用户必须与客户端证书和密钥进行验证。
语法示例
示例1:创建用户。
CREATE USER user1;
示例2:使用密码创建用户。
CREATE USER user2 WITH PASSWORD “123456”;
ALTER USER
ALTER USER 语句用于添加或更改用户密码。
语法格式
修改用户密码的语法格式如下:
使用IF EXISTS时,若用户名存在,则执行修改操作;若用户名不存在,则不执行修改操作且不抛出错误。
不使用IF EXISTS时,若用户名存在,则执行修改操作;若用户名不存在,则不执行修改操作且抛出错误:该用户不存在。
参数说明
name
要创建或添加其密码的用户名。
password
新的用户密码。密码应以字符串文字形式输入。为了与PostgreSQL兼容,虽然不建议使用密码,但也可以将其作为标识符输入。
语法示例
示例1:使用字符串更改密码。
ALTER USER user1 WITH PASSWORD ‘123456’;
ALTER USER 1
示例2:使用标识符更改密码
ALTER USER user1 WITH PASSWORD ilov3beefjerky;
ALTER USER 1
DROP USER
DROP USER 语句用于删除一个或多个用户。
语法格式
删除用户的语法格式如下:
- string_or_placeholder_list
- string_or_placeholder
在此处表示的是将要删除的用户名
语法示例
示例1:删除用户。
必须先撤消所有用户特权,然后才能删除该用户。
在此示例中,首先检查用户的权限。然后,在删除用户之前,请撤消用户的特权。
DROP USER user1; DROP USER 1
bini user
下面介绍bini user的使用方法,包括它的子命令、参数及其使用方法。
命令概览
创建一个用户
bini user set <username> <flags>
列出所有用户
bini user ls <flags>
查看指定用户
bini user get <username> <flags>
查看帮助
| bini user —help ZNBase user <subcommand> —help
子命令
所有的子命令如下表所示。
子命令 | 用法 |
---|---|
get | 检索包含用户及其hash密码的表。 |
ls | 列出所有用户。 |
rm | 删除用户。 |
set | 创建或更新用户。 |
参数说明
bini user的参数及其说明如下表。
flag | 描述 |
---|---|
—password | 为用户启用密码验证,系统将提示用户在命令行中输入密码。只有非root用户的安全模式群集支持密码创建。 |
—echo-sql | 显示命令行程序隐式发送的SQL语句。有关演示,请参见下面的示例。 |
—format | 到标准输出的格式。可能的值:tsv,csv,table,raw,records,sql,html。 默认值: table |
—host | 要连接的服务器主机和端口号。这可以是集群中任何节点的地址。 环境变量:ZNBASE_HOST 默认值:localhost:26257 |
—port | 要连接的服务器端口,也可以通过—host来指定端口号。 环境变量:ZNBASE_PORT 默认值:26257 |
-p | |
—user | 连接客户端的用户。 环境变量:ZNBASE_USER 默认值:root |
-u | |
—insecure | 连接非安全模式的集群。 环境变量:ZNBASE_INSECURE 默认值:false |
—certs-dir | 证书目录的路径,其中包含CA和客户端证书以及客户端密钥。 环境变量:ZNBASE_CERTS_DIR 默认值:${HOME}/. ZNBase-certs/ |
—url | 要使用的连接URL。 环境变量:ZNBASE_URL 默认值:no URL |
示例
示例1:创建用户。
安全模式:
bini user set jpointsman —certs-dir=certs
CREATE USER 1
以上语法可以首先登录ZNBASE的SQL客户端,然后执行如下SQL创建用户:
CREATE USER jpointsman WITH PASSWORD “123456”;
非安全模式:
bini user set jpointsman —insecure
示例2:修改用户密码
首先执行如下命令,
bini user set jpointsman —certs-dir=certs —password
Enter password:
Confirm password:
ALTER USER 1
执行此命令后,在命令提示符下输入并确认用户的新密码。
以上语法等同于SQL:
ALTER USER jpointsman WITH PASSWORD “123”;
示例3:查看所有用户。
bini user ls —certs-dir=certs user_name
+——————+
a
aaa
inspur
jman
jpointsman
root
user1
(7 rows);
以上语法等同于执行以下SQL:
bini sql —certs-dir=certs —host=192.168.0.30:26257 …
show users;
user_name
+——————+
a
aaa
inspur
jman
jpointsman
root
user1
(7 rows)
示例4:查看特定用户。
bini user get jpointsman —certs-dir=certs
user_name | is_role
+——————+————-+
jpointsman | false
以上语法等同于执行以下SQL:
SELECT * FROM system.users WHERE username= ‘jpointsman’;
username | hashedPassword | isRole
+——————+———————————————————————————————+————+
jpointsman | $2a$10$2nx6rhov0He/xUw2Xrl2SeK9.j0dYSzkIhvonR6OIxl3YQC8MAfrW | false
示例5:删除用户。
bini user ls —certs-dir=certs user_name
+——————+
a
aaa
inspur
jman
jpointsman
root
user1
bini user rm jpointsman —certs-dir=certs
DROP USER 1
bini user ls —certs-dir=certs
user_name
+—————-+
a
aaa
inspur
jman
root
user1
用户jpointsman已经被删除。
以上语法等同于执行如下SQL:
DROP USER jpointsman;
DROP USER 1
示例6:执行并显示命令行发送的隐式SQL语句。
ZNBase user ls —certs-dir=certs
user_name
+——————+
a
aaa
inspur
jman
jpointsman
root
user1
bini user rm jpointsman —certs-dir=certs —echo-sql > SELECT * FROM crdb_internal.node_build_info > DROP USER $1
DROP USER 1
ZNBase user ls —certs-dir=certs
user_name
+—————-+
a
aaa
inspur
jman
root
user1