数据库管理


用户管理

​ 要创建、管理和删除集群的用户,可以使用bini user及其子命令。当然,也可以使用CREATE USER和DROP USER语句创建和删除用户。

注意事项:

  • 用户名不区分大小写;必须以字母或下划线开头;必须仅包含字母,数字或下划线;且必须介于1到63个字符之间。
  • 创建用户之后,需要向他们授予数据库和表的权限。
  • 所有用户都属于该public角色,可以向其授予和撤消权限。
  • 安全模式的群集上,必须为用户创建客户端证书,并且用户必须验证其对群集的访问权限。
  • 删除用户之前必须删除该用户的所有权限。

CREATE USER

​ CREATE USER 语句用于创建SQL用户,可以控制数据库和表的权限。

​ 需要注意,用户只能由超级用户(即admin角色组成员)创建。默认情况下,root属于admin用户。

语法格式

有关创建用户的语法格式如下:

数据库管理 - 图1

不使用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 语句用于添加或更改用户密码。

语法格式

修改用户密码的语法格式如下:

数据库管理 - 图2

使用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 语句用于删除一个或多个用户。

语法格式

删除用户的语法格式如下:

数据库管理 - 图3

  • string_or_placeholder_list

数据库管理 - 图4

  • 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