Skip to content

创建用户

主要语法结构

语法格式

sql
CreateUserStmt::=
    CREATE USER user_name [ LOGIN alias_name ] IDENTIFIED BY 'password' 
    [ DEFAULT ROLE role_name_1[, role_name_2[, ...] ] ]
    [ VALID UNTIL date_time_expr ]
    [ ACCOUNT { LOCK | UNLOCK } ]
    [ PASSWORD EXPIRE ]
    [ opt_trust_ip ]
    [ opt_user_quotas ]
    [ ENCRYPT BY 'encryptor_name' ]

参数说明

  • user_name:要创建的用户名。
  • alias_name:用户的别名。
  • password:用户口令字符串。
  • role_name_1, role_name_2, ...:角色名。
  • VALID UNTIL date_time_expr:用户有效期截止时间的字符串,格式为日期或日期时间。
  • ACCOUNT { LOCK | UNLOCK }:账户是否锁定。
  • PASSWORD EXPIRE:密码失效。
  • opt_trust_ip:IPV4地址表达式,外部用单引号包裹。表达式可以为如下形式:
    • 单个IP地址:例如'192.168.2.21'
    • 多个IP地址:用逗号分隔的多个地址,例如'192.168.2.21,192.168.2.22,192.168.2.105'
    • IP地址范围;用减号分隔的地址上下界,例如'192.168.2.20-192.168.2.29'
    • 任意IP地址:关键字'ANY'
  • opt_user_quotas:设置用户在数据库中各种资源上的配额限制。
  • encryptor_name:加密机(即加密用的密钥)的名称。加密机相关内容请参见《数据加密指南》

资源配额限制opt_user_quotas

语法格式

sql
opt_user_quotas::=
    QUOTA int_value quantity_unit ON MEMORY
|   QUOTA UNLIMITED ON MEMORY
|   QUOTA int_value quantity_unit ON TEMP TABLESPACE
|   QUOTA UNLIMITED ON TEMP TABLESPACE
|   QUOTA int_value quantity_unit ON UNDO TABLESPACE
|   QUOTA UNLIMITED ON UNDO TABLESPACE
|   QUOTA int_value ON CURSOR
|   QUOTA UNLIMITED ON CURSOR
|   QUOTA int_value ON SESSION
|   QUOTA UNLIMITED ON SESSION
|   QUOTA int_value ON IO
|   QUOTA UNLIMITED ON IO
|   QUOTA int_value ON PROCEDURE
|   QUOTA UNLIMITED ON PROCEDURE
|   QUOTA int_value quantity_unit ON TABLESPACE
|   QUOTA UNLIMITED ON TABLESPACE

参数说明

  • int_value:设置的数值,取值为整数。
  • quantity_unit:设置数值的单位。例如要设置的资源配额为临时表空间,则单位可以为M、G等。
  • UNLIMITED:无限制。
  • MEMORY:内存配额。
  • TEMP TABLESPACE:临时表空间配额。
  • UNDO TABLESPACE:回滚表空间配额。
  • CURSOR:游标配额。
  • SESSION:会话配额。
  • IO:I/O配额。
  • PROCEDURE:存储过程配额。
  • TABLESPACE:表空间配额。

示例

  • 创建一个名为usr_test的用户,具有以下属性:

    • 登录别名为ut
    • 登录密码为123QWEasd!@
    • 默认角色为role_1role_2
    • 用户有效期截至2024-12-31 12:00:00
    • 账户状态为ACCOUNT LOCK锁定状态。
    • 临时表空间配额QUOTA 20 MB ON TEMP TABLESPACE,为用户设置了20 MB的临时表空间配额。
    sql
    SQL> CREATE USER usr_test LOGIN ut IDENTIFIED BY '123QWEasd!@'
         DEFAULT ROLE role_1, role_2
         VALID UNTIL '2021-12-31 12:00:00'
         ACCOUNT LOCK
         QUOTA 20 M ON TEMP TABLESPACE;
  • 使用ACCOUNT LOCK创建用户,支持对用户进行创建对象、授权操作,切换与登录报错。

    sql
    -- 创建用户
    SQL> CREATE USER user_test IDENTIFIED BY '123QWE$$&' ACCOUNT LOCK;
    
    -- 用户下创表
    SQL> CREATE TABLE user_test.t1(id INT);
    
    SQL> INSERT INTO user_test.t1 VALUES(1);
    
    SQL> SELECT * FROM user_test.t1;
    
    ID | 
    ------------------------------------------------------------------------------
    1| 
    
    -- 授权与回收权限
    SQL> GRANT DBA TO user_test;
    
    SQL> REVOKE DBA FROM user_test;
    
    -- 切换用户失败
    SQL> SET SESSION AUTHORIZATION user_test;
    [E18063] 切换用户失败,账户已锁定
    
    -- 登录用户失败
    SQL> USE SYSTEM USER = user_test PASSWORD = '123QWE$$&';
    [E18019] 登录验证失败
    
    -- 解锁
    SQL> ALTER USER user_test ACCOUNT UNLOCK;
    
    -- 切换用户成功
    SQL> SET SESSION AUTHORIZATION user_test;
    
    -- 切换回SYSDBA
    SQL> SET SESSION AUTHORIZATION SYSDBA;
    
    -- 登录用户成功
    SQL> USE SYSTEM USER = user_test PASSWORD = '123QWE$$&'; 
    
    -- 登录回SYSDBA
    SQL> USE SYSTEM USER = SYSDBA PASSWORD = 'SYSDBA';
  • 使用PASSWORD EXPIRE创建用户,支持对用户进行创建对象、授权操作,切换与登录报错。

    sql
      -- 创建用户
    SQL> CREATE USER user_test_2 IDENTIFIED BY '123qwe###' PASSWORD EXPIRE;
    
    -- 用户下创表
    SQL> CREATE TABLE user_test_2.t2(id INT);
    
    SQL> INSERT INTO user_test_2.t2 VALUES(1);
    
    SQL> SELECT * FROM user_test_2.t2;
    
    ID | 
    ------------------------------------------------------------------------------
    1| 
    
    -- 授权与回收权限
    SQL> GRANT DBA TO user_test_2;
    
    SQL> REVOKE DBA FROM user_test_2;
    
    -- 切换用户失败
    SQL> SET SESSION AUTHORIZATION user_test_2;
    [E18064] 切换用户失败,密码已失效
    
    -- 登录用户失败
    SQL> USE SYSTEM USER = user_test_2 PASSWORD = '123qwe###';
    [E18019] 登录验证失败
    
    -- 修改用户密码
    SQL> ALTER USER user_test_2 IDENTIFIED BY 'pass_1234';
    
    -- 切换用户成功
    SQL> SET SESSION AUTHORIZATION user_test_2;
    
    -- 切换回SYSDBA
    SQL> SET SESSION AUTHORIZATION SYSDBA;
    
    -- 登录用户成功
    SQL> USE SYSTEM USER = user_test_2 PASSWORD = 'pass_1234'; 
    
    -- 登录回SYSDBA
    SQL> USE SYSTEM USER = SYSDBA PASSWORD = 'SYSDBA';
  • 使用VALID UNTIL创建用户,支持对用户进行创建对象、授权操作,切换与登录报错。

    sql
      -- 创建用户
    SQL> CREATE USER user_test_3 IDENTIFIED BY '123qwe###' VALID UNTIL '2008-08-08';
    
    -- 用户下创表
    SQL> CREATE TABLE user_test_3.t3(id INT);
    
    SQL> INSERT INTO user_test_3.t3 VALUES(1);
    
    SQL> SELECT * FROM user_test_3.t3;
    
    ID | 
    ------------------------------------------------------------------------------
    1| 
    
    -- 授权与回收权限
    SQL> GRANT DBA TO user_test_3;
    
    SQL> REVOKE DBA FROM user_test_3;
    
    -- 切换用户失败
    SQL> SET SESSION AUTHORIZATION user_test_3;
    [E18062] 切换用户失败,时间已过期
    
    -- 登录用户失败
    SQL> USE SYSTEM USER = user_test_3 PASSWORD = '123qwe###';
    [E18019] 登录验证失败
    
    -- 修改用户时间
    SQL> ALTER USER user_test_3 VALID UNTIL '2099-10-1';
    
    -- 切换用户成功
    SQL> SET SESSION AUTHORIZATION user_test_3;
    
    -- 切换回SYSDBA
    SQL> SET SESSION AUTHORIZATION SYSDBA;
    
    -- 登录用户成功
    SQL> USE SYSTEM USER = user_test_3 PASSWORD = '123qwe###'; 
    
    -- 登录回SYSDBA
    SQL> USE SYSTEM USER = SYSDBA PASSWORD = 'SYSDBA';