本节主要介绍如何创建一个用户。
谁可以创建用户
数据库在运行过程中,往往需要创建不同的用户,并为用户赋予相应的权限,一般被授予 CREATE USER
权限的用户可以创建用户。
由于 CREATE USER
权限较大,默认仅集群管理员和租户管理员拥有此系统权限,其他用户如果需要创建用户,则需要被授予 CREATE USER
权限,授权相关操作请参见 修改用户权限。
用户名称的规则
为用户指定名称时,需要注意以下限制:
-
用户名的唯一性:每个用户名需要保证在租户内唯一。
用户名称在租户内是唯一的,不同租户下的用户可以同名,故通过
用户名@租户名
的形式可以在系统全局唯一定位一个租户用户。由于系统租户与 MySQL 租户属于同一兼容模式,为区别系统租户和普通租户下的用户,建议对系统租户下的用户名称使用特定前缀。
-
用户名的命名约定:
-
使用 OBClient 、ODC 等客户端创建用户时,要求用户名长度不超过 64 个字节。
-
使用 OCP 创建用户时,要求用户名以英文字母开头,可包含大写字母、小写字母、数字和下划线,且长度为 2~64 个字符。
-
通过 SQL 语句创建一个拥有最小数据库权限的用户
您可以使用 CREATE USER
语句创建用户。创建用户必须拥有 CREATE USER
的系统权限。在创建用户时,建议坚持最小权限原则,即所有用户只拥有执行其任务所需的最小权限。
创建用户的 SQL 语句如下:
CREATE USER [IF NOT EXISTS] user_specification_list
[REQUIRE {NONE | SSL | X509 | tls_option}];
user_specification_list:
user_specification [, user_specification ...]
user_specification:
user IDENTIFIED BY 'authstring'
| user IDENTIFIED BY PASSWORD 'hashstring'
tls_option:
| CIPHER 'cipher'
| ISSUER 'issuer'
| SUBJECT 'subject'
语句说明:
-
IF NOT EXISTS
:如果待创建的用户名已存在并且未指定IF NOT EXISTS
,则系统会报错。 -
IDENTIFIED BY
:使用可选的IDENTIFIED BY
子句,可以为账户指定一个密码。其中:
-
user IDENTIFIED BY 'authstring'
语句中的密码为明文,存入mysql.user
表中后,服务器端会变为密文存储下来。 -
user IDENTIFIED BY PASSWORD 'authstring'
语句中的密码为密文。
-
-
REQUIRE
用于指定用户使用的加密协议,为NONE
、SSL
、X509
和tls_option
中的一种。
创建一个拥有最小数据库权限的用户 test2
的示例如下。
-
使用
root
用户登录到 Mysql 租户。 -
执行以下命令,创建用户
test2
。obclient> CREATE USER 'test2' IDENTIFIED BY '**1***';
-
执行以下命令,授予用户
test2
访问数据库db1
中所有表的权限。obclient> GRANT SELECT ON db1.* TO test2;