CREATE USER
功能描述
创建数据库用户账户。
注意事项
-- 权限要求:执行用户创建语句的操作者,需具备 CREATE USER 的系统权限。
-- 数量限制:数据库支持创建的用户上限为 15000 个,超出该数值将触发错误提示。
-- 权限容量:单个用户可承接的对象权限对应的对象数量为 2048 * 2048 个。
-- 命名唯一性:用户名不得与数据库中已存在的用户名、角色名重复,否则系统返回错误提示:"user name already exists"。
-- 创建用户时,必须指定用户名和初始密码;用户首次登录时,需完成密码修改操作。
-- 通过 ogsql 客户端新建用户时,为提升安全性,可在创建环节手动设置密码过期,也可通过 ALTER USER 语句配置密码过期;用户需通过 ogsql 客户端以交互式方式修改密码后登录,以管控密码的知晓范围。
-- 系统预置用户限制:SYS 用户和 PUBLIC 用户为系统内置用户,禁止手动创建: (1)SYS 用户:用于数据库实例的初始创建流程。 (2)PUBLIC 用户:系统预置的公共用户,代表所有数据库用户的集合;若为 PUBLIC 用户被授予某一权限,则该权限将覆盖所有数据库用户。示例如下: ▪ 授予 PUBLIC 用户对 user.t 表的 SELECT 权限,所有用户均可访问该表:GRANT SELECT ON user.t TO PUBLIC; ▪ 授予 PUBLIC 用户 DBA 权限,所有用户均拥有 DBA 权限:GRANT DBA TO PUBLIC;
-- 权限继承控制:当参数 AUTO_INHERIT_USER 配置为 ON 时,新创建用户的 INHERIT PRIVILEGES 权限会默认赋予 public 用户;为保障数据库安全,禁止向 public 用户授予该权限。
-- 审计日志规则:CREATE USER 语句中填写的用户密码,在审计日志中会被替换为"*"进行记录。
语法格式
CREATE USER user_name IDENTIFIED BY password [ ENCRYPTED | DEFAULT TABLESPACE tablespace_name | TEMPORARY TABLESPACE tablespace_name | PASSWORD EXPIRE | ACCOUNT { LOCK | UNLOCK } | PROFILE profile_name | PERMANENT ] [ ... ]
参数说明
user_name(用户名):
- 长度限制:用户名长度需满足 1 ≤ 字符数 ≤ 64。
- 开头规则:禁止以数字作为用户名首字符。
- 特殊字符禁止:用户名不得包含以下字符(即使使用双引号或者反引号包裹也不允许):分号(;)、竖线(|)、反引号(`)、美元符($)、位运算符(&)、大于号(>)、小于号(<)、双引号(")、单引号(')、感叹号(!)、空格、版权符号(©)。
- 特殊字符合规处理:若用户名包含上述禁止字符外的其他特殊字符,必须用双引号("")或反引号(``)包裹。
- 格式转换:用户名默认自动转换为大写;双引号内开头的Tab 键会被自动剔除,最终存储的用户名不含空格。
- 关键字规避:SYSDBA、CLSMGR 为数据库关键字,使用此类名称创建用户会导致登录失败,建议避免使用。
IDENTIFIED BY: 密码指定子句,用于创建用户时为其设置初始密码。
password: 用户密码。 密码(password)需遵循以下规范:
- 长度:普通密码长度需≥PROFILE 中
PASSWORD_MIN_LEN参数设定的最小值,且≤64个字符。 - 首字符:若密码未用引号包裹,首字符必须是字母、
#号或下划线。 - 唯一性:密码不得与用户名(或用户名倒序)相同(校验时不区分大小写)。
- 复杂度:密码仅可包含"数字"、"小写字母"、"大写字母"、"空格或特殊字符"四类字符,且至少包含其中3类。
- 包裹:若密码包含除_#$外的特殊字符或空格,必须用引号包裹。
- 登录适配:如果密码含特殊字符$,通过ogsql连接,若密码在单引号内无需用\转义,否则需\转义(未转义会导致登录失败)。
- 密码含空格时:仅支持交互式登录。
- conn命令登录:密码段所有字符均视为密码本身。
- 长度:普通密码长度需≥PROFILE 中
DEFAULT TABLESPACE tablespace_name: 用于定义用户的私有默认表空间,要求指定的表空间必须已存在。
TEMPORARY TABLESPACE tablespace_name: 用于定义用户的默认临时表空间,要求指定的表空间必须已存在;当前仅支持将temp表空间指定为临时表空间。
PASSWORD EXPIRE:
- 效果:配置后如果用户密码过期,登录时提示 "the password has expired"。
- 客户端适配:
- OGSQL客户端:密码过期账户登录时会弹出交互式改密窗口,强制修改密码;改密成功则进入数据库连接,改密失败则退出窗口;
- 其他客户端:直接报错并退出登录流程。
ACCOUNT {LOCK | UNLOCK}: 效果:手动锁定账户后,用户登录时提示 "the account is locked",且禁止登录;解锁后恢复正常。
PROFILE profile_name: 档案配置。
说明: 创建用户时引用的 PROFILE 必须提前创建并配置;未明确指定时,默认引用 default PROFILE,也可通过双引号显式引用"DEFAULT" PROFILE。
说明: 系统管理员 SYS 用户默认引用 default PROFILE;为避免普通用户的安全策略配置影响 SYS 用户,建议为普通用户单独创建专属 PROFILE。
ENCRYPTED: 密文密码标识。
- 作用:标识指定的密码为加密密文(建议用单引号包裹),指定密文时不校验密码规范。
- 使用规则:
- ENCRYPTED关键字必须位于password后的第一个参数位置,否则报错。
- 该方式创建用户时,无法校验密文对应的明文密码是否符合 PROFILE 中 PASSWORD_MIN_LEN 参数要求。
- 此类用户仍需使用明文密码登录,不推荐采用该方式;管理员可通过设置 enable_password_cipher 参数关闭该创建方式。
PERMANENT: 永久用户标识。
- 核心规则:标记为 PERMANENT 的用户为不可删除账户,仅 SYS 用户可创建或删除此类账户。
- 操作限制:账户创建后,仅 SYS 用户可执行以下操作:修改密码、切换锁定状态、手动设置密码过期、变更关联 PROFILE、变更用户表空间。
- 其他特性:除上述受限操作外,此类账户的其他特性与普通账户一致(例如修改其关联的 PROFILE,影响效果与普通账户相同)。
特殊字符:
编号 字符 1 ` 2 ~ 3 ! 4 @ 5 # 6 $ 7 % 8 ^ 9 & 10 * 11 ( 12 ) 13 - 14 _ 15 = 16 + 17 | 18 19 [ 20 { 21 } 22 ] 23 : 24 ' 25 " 26 , 27 < 28 . 29 > 30 / 31 ?
示例
创建用户mike,设置手动密码过期,提示用户返回登入。
CREATE USER mike IDENTIFIED BY "123ggFGgh" PASSWORD EXPIRE;