#CREATE USER

# 通用描述

CREATE USER用于新建一个数据库用户。系统默认创建的是普通用户,YashanDB的用户管理体系请参考产品安全手册用户管理

# 语句定义

create user::=

syntax
CREATE USER user_name IDENTIFIED BY VALUES password DEFAULT TABLESPACE tablespace DEFAULT TABLESPACE SET tablespace_set TEMPORARY TABLESPACE tablespace LOCAL TEMPORARY TABLESPACE tablespace PROFILE profilename ACCOUNT LOCK UNLOCK quota_clause

quota_clause::=

syntax
QUOTA FLOOR size_clause UNLIMITED ON tablespace

# user_name

该语句用于指定创建的用户的名称,不可省略,且需符合YashanDB的对象命名规范

# values

该语句用于指定按密文创建用户的密码,可省略,则按明文创建密码。

YashanDB的密码策略为加密传输和加密存储,即服务端存储的是密文密码。在某些特定场景(例如数据库迁移),可通过直接指定密文来创建密码,该操作不影响用户前端输入明文密码登录。

# identified by password

该语句用于指定创建的用户的密码,可省略,省略则默认无密码。

该语句需满足如下规则:

  • 不可指定为NULL或''。
  • 可以为数字、字母和特殊符号的组合。
  • 密码字符不可以为双引号。
  • 当包含%\;@/等特殊符号时,密码字符串前后需加双引号。
  • 区分大小写。
  • 密码字符串长度不超过64。
  • 遵循安全手册中所制定的密码策略要求。

Note

无密码的用户无法连接至YashanDB中,创建新用户时建议执行本语句为该用户指定密码。

当指定VALUES时,password内容为密文,不遵循上述规则,但需符合如下基本格式要求,否则创建用户失败且提示YAS-04289错误:

  • 必须以S:开头。
  • 整个长度必须是86字节。
  • S:后只能是数字和大写的字母。

@和/的特殊处理

YashanDB允许在密码中包含@/等特殊符号,在输入密码进行登录时,包含@/的密码字符串前后也必须使用双引号标识。

在Linux OS命令行模式中,双引号为特殊含义字符,对其的使用需用\进行转义或由单引号包裹。

示例

-- 创建sales1和sales2两个用户,其中sales2用户密码包含了@和/
CREATE USER sales1 IDENTIFIED BY "1%2";
CREATE USER sales2 IDENTIFIED BY "1@2/";

-- 需至少授予用户CREATE SESSION权限,以使用户能连接数据库
GRANT CREATE SESSION TO sales1;
GRANT CREATE SESSION TO sales2;

-- 在SQL客户端连接时应输入的密码格式
conn sales1/1%2
conn sales2/"1@2/"

-- 在命令行连接时应输入的密码格式
$ yasql sales1/1%2
$ yasql sales2/\"1@2/\"

# default tablespace

该语句用于指定创建的用户的默认表空间,可省略,则缺省为数据库创建时的DEFAULT表空间。

示例

CREATE USER sales3 IDENTIFIED BY 123 DEFAULT TABLESPACE users;

# default tablespace set

该语句用于指定用户的默认表空间集,要求对应的表空间集已存在。可省略,省略则缺省为 USERS 表空间集。

该语句仅适用于分布式部署。

示例(分布式部署)

CREATE TABLESPACE SET sales_tss ON USERS MAXSIZE 1G;
CREATE USER sales123 IDENTIFIED BY 123 DEFAULT TABLESPACE SET sales_tss;

# temporary tablespace

该语句用于指定创建的用户的默认TEMP表空间,可省略,则缺省为数据库创建时的TEMP表空间。

分布式部署中无法使用此功能。

示例(单机、共享集群部署)

CREATE USER sales3 IDENTIFIED BY 123 TEMPORARY TABLESPACE temp;

# local temporary tablespace

该语句用于指定创建的用户的默认本地TEMP表空间,可省略,缺省值为空,此时用户创建临时表默认使用TEMP表空间。

如同时指定本地TEMP表空间与TEMP表空间,优先使用本地TEMP表空间。

分布式部署/单机部署中无法使用此功能。

示例(共享集群部署)

CREATE USER sales3 IDENTIFIED BY 123 LOCAL TEMPORARY TABLESPACE local_temp;

# profile

该语句用于为创建的用户指定对应的profile,profile见CREATE PROFILE中描述。

本语句可省略,则缺省对应系统默认的profile。

示例

CREATE USER sales5 IDENTIFIED BY 123 PROFILE DEFAULT;

# account (lock|unlock)

该语句用于指定在创建用户时是否锁定该用户,若锁定则该用户将不可登录。

本语句可省略,若省略则默认为不锁定。

示例

CREATE USER sale4 IDENTIFIED BY 123 ACCOUNT LOCK;

# quota_clause

该语句用于为用户指定表空间配额,可省略,该语句不适用于分布式部署。

表空间配额包括上限与下限,上限指用户可以在对应表空间使用的最大空间,下限指表空间需要为用户预留的最少空间。

不指定表空间配额或上下限均指定为UNLIMITED的情况下,用户默认可以任意使用表空间。

表空间配额的配置规则如下:

  • 当指定的上限值或下限值不等于单个BLOCK大小的整数倍时,会自动向上取整为BLOCK的整数倍的值。
  • 下限值不得大于上限值。
  • 如需为用户在某个表空间上配置表空间配额的下限约束,需确保该表空间的预留空间充足,否则会报错。
  • 不能对SYSTEM表空间配置表空间配额的下限约束。
  • sys用户、拥有DBA角色的用户均不受表空间配额的上限约束,且不能为sys用户配置表空间配额约束(即使语句执行成功也不会生效)。

# quota(size_clause|unlimited)

QUOTA关键字用于为用户指定表空间配额的上限,可省略。

省略或指定为UNLIMITED表示无空间使用上限约束。

上限值需为正数且不能超过2T,单位为字节,其数值可以为阿拉伯数字(例如1、20或100等)或含量级单位的数值(例如2K、3M、4G或1T等)。

# floor(size_clause|unlimited)

FLOOR关键字用于为用户指定表空间配额的下限,可省略。

省略或指定为UNLIMITED表示不预留空间。

下限值需为正数且不能超过2T,单位为字节,其数值可以为阿拉伯数字(例如1、20或100等)或含量级单位的数值(例如2K、3M、4G或1T等)。

示例(单机、共享集群部署)

CREATE USER sale5 IDENTIFIED BY u1 QUOTA 100M FLOOR 10000 ON tablespace1;

CREATE USER sale6 IDENTIFIED BY u2 QUOTA UNLIMITED ON tablespace2;

CREATE USER sale7 IDENTIFIED BY u3 FLOOR 20M ON tablespace3 QUOTA 1G ON tablespace4;