用户管理
本部分内容主要介绍在openGemini内部如何创建用户、删除用户、授权等。
openemini无内置账号,开启鉴权,并成功启动后,需要主动创建系统唯一的管理员账号。openGemini的账号分为管理员账号和普通账号,对应角色分别是admin和user,管理员账号在系统内只能创建一次,不能删除,并且不能重命名。普通账号可以创建多个,由管理员创建,并且需要管理员授权才可以访问数据库。
普通用户的权限和DB关联,权限分为READ、WRITE、ALL三种,分别表示可读、可写、可读写。如果一个普通用户被授予对DB的READ权限,则这个普通用户只能查询该DB的元数据以及DB内表中数据。
提示
先创建管理员账号,再开启https和身份认证
初始状态创建管理员账号
启动openGemini单机或者集群
> curl -i -XPOST "http://ip:8086/query" -k --insecure --data-urlencode "q=CREATE USER admin WITH PASSWORD 'admin-passwd' WITH ALL PRIVILEGES"
| 该命令创建了一个管理员账号,账号名称admin
提示
- 执行时,需要将命令中的IP地址和端口替换为实际环境中的ts-sql的ip和port,同时设置管理员账号名和密码
- 密码必须由大小写字母、数字、特殊字符组成,长度限制为8-256位字符
- config/weakpasswd.properties为若密码配置文件,默认支持若密码校验,如果设置的密码与配置文件中的密码一致,则视为若密码,不允许使用。
- 密码字符串必须用单引号引起来,验证请求时,请包含单引号。
- 在密码中使用单引号(‘)和反斜杠(\)字符,对于包含这些字符\’的密码,在创建密码和提交身份验证请求时,请使用反斜杠对特殊字符进行转义
也可以通过ts-cli连接openGemini, 通过客户端创建
> ts-cli -host xxx -port xxx
openGemini CLI 0.1.0 (rev-revision)
Please use `quit`, `exit` or `Ctrl-D` to exit this program.
> CREATE USER admin WITH PASSWORD 'nJa@w7f@12' WITH ALL PRIVILEGES
> SHOW USERS
+-------+-------+
| user | admin |
+-------+-------+
| admin | true |
+-------+-------+
2 columns, 1 rows in set
警告
出于安全考虑,openGemini的管理员账号在系统内只能创建一次,不能删除,并且不能重命名。创建管理员账户前,请认真考虑用户名和密码<username>
,并做好账号和密码的保存。
开启身份认证和https功能
- 如使用openGemini集群,修改配置文件openGemini.conf
[http]
auth-enabled = true
https-enabled = true
https-certificate = "path/to/certificate.crt"
https-private-key = "path/to/certificate.key"
- 如使用openGemini单机,修改配置文件openGemini.singlenode.conf,在[http]下如下内容
[http]
auth-enabled = true
https-enabled = true
https-certificate = "path/to/certificate.crt"
https-private-key = "path/to/certificate.key"
如果将crt文件和key文件合并为pem文件,则可以只配置https-certificate选项。自验证证书制作参考-生成证书和密钥
,确保配置生效。
~$ ts-cli -host xx -port xx -ssl -unsafeSsl
openGemini CLI 0.1.0 (rev-revision)
Please use `quit`, `exit` or `Ctrl-D` to exit this program.
> show databases
ERR: unable to parse authentication credentials
上述错误信息表示https和身份认证已经生效
账号登陆
~$ ts-cli -host xx -port xx -ssl -unsafeSsl
openGemini CLI 0.1.0 (rev-revision)
Please use `quit`, `exit` or `Ctrl-D` to exit this program.
> auth
username: admin
password:
验证是否生效
> show databases
name: databases
+------+
| name |
+------+
1 columns, 0 rows in set
上述命令正确执行,表示用户已生效,接下来就可以使用管理员用户创建普通用户或执行其他操作。
创建普通用户
需要使用管理员登陆,才可以创建普通用户
创建普通用户user0,不带任何权限,需要单独授权
> CREATE USER user0 WITH PASSWORD 'your_pwd'
SHOW USERS
查看所有现有用户及其管理员状态
> SHOW USERS
+-------+-------+
| user | admin |
+-------+-------+
| admin | true |
| user0 | false |
+-------+-------+
2 columns, 2 rows in set
DROP USER
删除用户
语法
DROP USER <username>
示例
DROP USER "user0"
GRANT
授予现有用户对DB的 READ
, WRITE
or ALL
权限
语法
GRANT [READ,WRITE,ALL] ON <database_name> TO <username>
示例
授权user0
对 NOAA_water_database
数据库读权限:
GRANT READ ON "NOAA_water_database" TO "user0"
授权user0
对NOAA_water_database
数据库所有权限:
GRANT ALL ON "NOAA_water_database" TO "user0"
SHOW GRANTS
查看指定用户现有权限
语法
> SHOW GRANTS FOR <username>
示例
> SHOW GRANTS FOR "user0"
+----------------------+-----------+
| database | privilege |
+----------------------+-----------+
| NOAA_water_database | READ |
+----------------------+-----------+
2 columns, 1 rows in set
REVOKE
回收用户权限
语法
> REVOKE [READ,WRITE,ALL] ON <database_name> FROM <username>
示例
取消 user0
用户对 NOAA_water_database
数据库的写权限:
> REVOKE WRITE ON "NOAA_water_database" FROM "user0"
取消 user0
用户对 NOAA_water_database
所有权限:
> REVOKE ALL ON "NOAA_water_database" FROM "user0"
SET PASSWORD
重置密码
语法
> SET PASSWORD FOR <username> = '<password>'
示例
> SET PASSWORD FOR "user0" = 'your_pwd'
提示
密码字符串必须用单引号引起来,验证请求时,请包含单引号
建议避免在密码中使用单引号(‘)和反斜杠(\)字符,对于包含这些字符\’的密码,在创建密码和提交身份验证请求时,请使用反斜杠对特殊字符进行转义,(例如())