用户
📄字数 8.2K
👁️阅读量 加载中...
一、用户介绍
1.1 用户概念
数据库用户是指在数据库管理系统中被识别和授权的个体或对象实体,用于访问、操作和分类管理数据库的实体对象。
用户一般具有以下特征:
- 唯一标识。用户是以库为单位进行隔离,不同的库可以有相同的用户名。
- 身份认证。用户或应用程序,在登录数据库时,需要通过密码来验证身份。
- 权限控制。实现权限隔离。也可以通过角色实现权限的简化管理。
- 对象管理。每个用户都拥有一个默认的同名模式,这个模式包含了用户创建的所有数据库对象,如表、视图、索引等。用户可以创建多个模式,每个模式中的对象也可以被多个用户使用。
例如在db_1
库中创建usr_1
用户,该用户只能用来登录db_1
库,而无法用来登录db_2
库,除非在db_2
库中也创建同名的用户;
此外即使db_2
中也创建了usr_1
用户,但其用户口令、用户权限等也可能和db_1
中的usr_1
用户不同。
1.2 用户分类
在数据库系统中包括两类用户:系统用户和普通用户。
- 系统用户:数据库默认创建的用户。系统用户均拥有已设定好的权限。默认系统用户有:SYSDBA、SYSAUDITOR、SYSSSO、GUEST。
- 普通用户:由数据库管理员或具有创建用户权限的用户手动创建,并根据应用需求授予相应权限。针对普通用户,应采用最小权限的方式进行权限管理,避免用户越权操作数据库,影响数据库安全。
1.2.1 系统用户说明
系统用户又分为管理员用户和访客用户,管理员用户的权限体系为“三权分立”,即每个库中SYSDBA、SYSAUDITOR、SYSSSO三个用户分别拥有管理权限、审计权限、安全相关权限。
SYSDBA(数据库管理员)拥有被系统赋予的默认权限,以行使如下职责:
- 管理各种数据库对象,如用户、角色、表、视图、存储过程等的创建、修改、删除。
- 为创建的用户授予/回收各种权限(除了审计和安全之外的权限)。
- 更改数据库参数,设置数据库资源限额。
- 管理数据库的备份、恢复。
- 管理数据库集群。
SYSAUDITOR(审计管理员)拥有被系统赋予的默认权限,以行使如下职责:
- 开启和关闭审计功能。
- 对指定的主体或客体启用/禁用指定类型的审计。
- 查询和管理审计结果。
- 管理审计相关权限,授予其他用户/从其他用户收回权限。
SYSSSO(安全管理员)拥有被系统赋予的默认权限,以行使如下职责:
- 创建加密机。
- 对主体或客体定义/应用/删除安全策略。
- 黑白名单规则制定。
- 管理安全相关权限,授予其他用户/从其他用户收回权限。
GUEST(访客用户)无任何除登录外的初始权限:
- 主要用于在某些应用场合允许一般用户(无特别授权的用户)继承授予GUEST用户的权限,即给予一般用户一个最基本的权限。
1.2.2 普通用户说明
- 普通用户由数据库管理员或具有创建用户权限的用户手动创建,仅含有登录权限,需管理员授予相应权限后方可进行更多操作;权限相关内容可查看 权限管理。
提示
- 用户对其拥有的对象享有一切操作权限,即使该用户未被授予任何权限;
- 例如:新用户A未被赋予任何权限,如果用户B在用户A模式下创建了表对象,则用户A拥有对该表的一切操作权限,包括增删改查以及删除表。
1.3 用户属性
每个用户都拥有标识,即名称和ID号;其中名称和ID号在当前库中唯一,即同一个库中不能有两个及以上同名或同ID号的用户。库的标识和用户标识可以唯一确定一个数据库用户。
用户还拥有其他属性,包括用户口令(加密后)、被授予的角色(角色相关内容参见角色部分)、有效期、锁定标记、过期标记、信任IP、用户别名等等;属性记载详情查看系统视图ALL_USERS部分。
说明
单个实例库下的用户标识唯一,不能存在同名的其他用户,否则创建失败。
首次启动数据库时系统库下自动生成管理员用户(SYSDBA、SYSAUDITOR、SYSSSO)及GUEST用户,应及时修改管理员用户口令,避免长期使用初始口令。
每个实例库在创建时自动生成管理员用户,对实例库进行一对一管理。
1.4 用户口令
用户口令需满足口令相关参数要求:
pass_mode
:控制口令模式,当取值为1、2、3时,直接控制口令中需要包含的字符种类,当取值为4时,代表开启强口令模式,不直接控制口令复杂度要求,具体可参见 pass_mode。min_pass_len
:控制口令最小长度,具体可参见min_pass_len。min_pass_number
:控制口令中包含数字的最小数量,具体可参见min_pass_number。min_pass_mixed_case
:控制口令中大写字母与小写字母的最小数量,具体可参见min_pass_mixed_case。min_pass_special_char
:控制口令中特殊字符的最小数量,具体可参见min_pass_special_char。pass_username_check
:控制口令中是否可以包含用户名,具体可参见pass_username_check。weak_pass_dictionary
:控制口令中是否可以包含弱口令字典中定义的弱口令,具体可参见具体可参见weak_pass_dictionary。
数据库用户口令应为无意义的字符组,长度推荐至少八位(即min_pass_len
为8),并且至少包括数字、英文字母(区分大小写)、特殊字符等其中两类字符(即pass_mode
为2)。
应定期或不定期修改数据库管理员口令,在下述几种情况下应修改数据库管理员口令:
- 数据库正式使用之前。
- 数据库系统或相关的应用系统遭到入侵。
- 数据库管理员轮换。
- 数据库管理员口令泄露。
- 其它修改口令要求。
注意
- 对于系统用户,当 pass_mode 取值为1、2、3时,初始默认口令与用户名相同,GUEST较特殊,为GUESTGUEST;当 pass_mode 取值为4时,初始默认口令为随机生成的字符串,在启动日志中可查看。
- 数据库用户口令为敏感信息,用户应当妥善保存,避免泄露。
- 账号口令推荐使用较为复杂的口令策略,同时,口令的变更应通知相关责任人,否则会出现建立连接失败的情况 (口令连续输入错误三次会锁定连接访问IP三分钟)。
- 系统用户的默认密码与参数配置相关,详细信息参考系统安全参数。
二、创建用户
CREATE USER 语句用于创建新的数据库用户,需确定当前用户是否具有创建用户权限。创建新用户后,可以使用新用户连接当前数据库,本章将介绍如何创建新用户,切换或登录新用户,以及在系统中查看用户信息。
2.1 语法格式
2.2 参数说明
user_name
:目标创建的用户名;alias_name
:用户的别名;password
:用户口令字符串;role_name, role_name, ...
:角色名,用户创建时即可获得其中包含的所有权限;VALID UNTIL date_time_expr
:用户有效期截止时间的字符串,格式为日期或日期时间,当前时间超过此指定时间即为超过有效期,此时支持对用户进行创建对象、授权操作,但切换与登录该用户时报错,修改有效期大于当前时间后恢复正常;ACCOUNT ( LOCK | UNLOCK )
:新用户是否在创建成功后锁定,若指定为LOCK,则用户创建后即为锁定状态,此时支持对用户进行创建对象、授权操作,但切换与登录该用户时报错,修改为UNLOCK后恢复正常;PASSWORD EXPIRE
:设置用户初始为密码失效状态,创建后支持对用户进行创建对象、授权操作,但切换与登录该用户时报错,修改密码后恢复正常;QuotasOption
:设置用户在数据库中各种资源上的配额限制;int_value
:设置的数值,取值为非负整数;UNLIMITED
:无限制;CURSOR
:游标配额,限制该用户可创建游标数最大为int_value
值;SESSION
:会话配额,限制该用户可创建连接会话数最大为int_value
值;
encryptor_name
:加密机的名称;加密机相关内容请参见 加密机。
2.3 示例
- 示例1
- 创建一个名为
usr_test
的用户,具有以下属性:- 登录别名为
ut
; - 登录密码为
123QWEasd!@
; - 默认角色为
role_1
和role_2
; - 用户有效期截至
2050-12-31 12:00:00
; - 游标配额为
10
; - 会话配额为
5
; - 使用加密机
ENC_TEST
加密。
- 登录别名为
- 创建一个名为
sql
SQL> CREATE ENCRYPTOR 'ENC_TEST' BY 'ENC_TEST'; --加密机需使用SYSSSO用户创建
SQL> CREATE ROLE role_1;
SQL> CREATE ROLE role_2;
SQL> CREATE USER usr_test LOGIN ut IDENTIFIED BY '123QWEasd!@'
DEFAULT ROLE role_1, role_2
VALID UNTIL '2050-12-31 12:00:00'
QUOTA 10 ON CURSOR
QUOTA 5 ON SESSION
ENCRYPT BY 'ENC_TEST';
-- 用户相关信息可通过查询系统视图dba_users查看
SQL> SELECT USER_NAME,UNTIL_TIME,ALIAS,CURSOR_QUOTA,SESSION_QUOTA,ENCRY_ID FROM dba_users WHERE USER_NAME='usr_test';
+-----------+--------------------------+-------+--------------+---------------+----------+
| USER_NAME | UNTIL_TIME | ALIAS | CURSOR_QUOTA | SESSION_QUOTA | ENCRY_ID |
+-----------+--------------------------+-------+--------------+---------------+----------+
| USR_TEST | 2050-12-31 12:00:00.000 | UT | 10 | 5 | 2 |
+-----------+--------------------------+-------+--------------+---------------+----------+
示例2
使用
ACCOUNT LOCK
创建用户,则新建用户在创建成功后即为锁定状态,此时支持对用户进行创建对象、授权操作,但切换与登录该用户时报错。sql-- 创建用户 SQL> CREATE USER usr_test IDENTIFIED BY '123QWE$$&' ACCOUNT LOCK; -- 用户下创表 SQL> CREATE TABLE usr_test.t1(id INT); SQL> INSERT INTO usr_test.t1 VALUES(1); SQL> SELECT * FROM usr_test.t1; +----+ | ID | +----+ | 1 | +----+ -- 授权与回收权限 SQL> GRANT DBA TO usr_test; SQL> REVOKE DBA FROM usr_test; -- 切换用户失败(切换用户方式一:设置会话连接用户) SQL> SET SESSION AUTHORIZATION usr_test; [E18063] 切换用户失败,账户已锁定 -- 登录用户失败(切换用户方式二:通过用户密码登录数据库) SQL> USE SYSTEM USER = usr_test PASSWORD = '123QWE$$&'; [E18019] 登录验证失败 -- 解锁 SQL> ALTER USER usr_test ACCOUNT UNLOCK; -- 切换用户成功 SQL> SET SESSION AUTHORIZATION usr_test; -- 切换回SYSDBA SQL> SET SESSION AUTHORIZATION SYSDBA; -- 登录用户成功 SQL> USE SYSTEM USER = usr_test PASSWORD = '123QWE$$&'; -- 登录回SYSDBA SQL> USE SYSTEM USER = SYSDBA PASSWORD = 'SYSDBA';
示例3
使用
PASSWORD EXPIRE
创建用户,则新建用户在创建成功后即为密码失效状态,此时支持对用户进行创建对象、授权操作,但切换与登录该用户时报错,修改密码后恢复正常。sql-- 创建用户 SQL> CREATE USER usr_test_2 IDENTIFIED BY '123qwe###' PASSWORD EXPIRE; -- 用户下创表 SQL> CREATE TABLE usr_test_2.t2(id INT); SQL> INSERT INTO usr_test_2.t2 VALUES(1); SQL> SELECT * FROM usr_test_2.t2; +----+ | ID | +----+ | 1 | +----+ -- 授权与回收权限 SQL> GRANT DBA TO usr_test_2; SQL> REVOKE DBA FROM usr_test_2; -- 切换用户失败 SQL> SET SESSION AUTHORIZATION usr_test_2; [E18064] 切换用户失败,密码已失效 -- 登录用户失败 SQL> USE SYSTEM USER = usr_test_2 PASSWORD = '123qwe###'; [E18019] 登录验证失败 -- 修改用户密码 SQL> ALTER USER usr_test_2 IDENTIFIED BY 'pass_1234'; -- 切换用户成功 SQL> SET SESSION AUTHORIZATION usr_test_2; -- 切换回SYSDBA SQL> SET SESSION AUTHORIZATION SYSDBA; -- 登录用户成功 SQL> USE SYSTEM USER = usr_test_2 PASSWORD = 'pass_1234'; -- 登录回SYSDBA SQL> USE SYSTEM USER = SYSDBA PASSWORD = 'SYSDBA';
示例4
使用
VALID UNTIL
创建用户,则新建用户在创建成功后即为超过有效期,此时支持对用户进行创建对象、授权操作,但切换与登录该用户时报错,修改有效期大于当前时间后恢复正常。sql-- 创建用户 SQL> CREATE USER usr_test_3 IDENTIFIED BY '123qwe###' VALID UNTIL '2008-08-08'; -- 用户下创表 SQL> CREATE TABLE usr_test_3.t3(id INT); SQL> INSERT INTO usr_test_3.t3 VALUES(1); SQL> SELECT * FROM usr_test_3.t3; +----+ | ID | +----+ | 1 | +----+ -- 授权与回收权限 SQL> GRANT DBA TO usr_test_3; SQL> REVOKE DBA FROM usr_test_3; -- 切换用户失败 SQL> SET SESSION AUTHORIZATION usr_test_3; [E18062] 切换用户失败,时间已过期 -- 登录用户失败 SQL> USE SYSTEM USER = usr_test_3 PASSWORD = '123qwe###'; [E18019] 登录验证失败 -- 修改用户时间 SQL> ALTER USER usr_test_3 VALID UNTIL '2099-10-1'; -- 切换用户成功 SQL> SET SESSION AUTHORIZATION usr_test_3; -- 切换回SYSDBA SQL> SET SESSION AUTHORIZATION SYSDBA; -- 登录用户成功 SQL> USE SYSTEM USER = usr_test_3 PASSWORD = '123qwe###'; -- 登录回SYSDBA SQL> USE SYSTEM USER = SYSDBA PASSWORD = 'SYSDBA';
三、切换/登录用户
当创建新用户之后,可通过两种方式连接到该用户:
- 设置当前会话连接用户(下文介绍);
- 通过用户密码登录数据库时指定新用户(详见库文档)。
user_name
:要切换的用户名;
四、查看用户
创建的用户信息保存在数据库的字典中,几个常用的字典及视图如下:
SYS_USERS:该系统表用于存储、管理系统库和用户库中所有创建的用户,查看需在系统库下有管理员权限。
ALL_USERS:该系统视图仅显示当前用户自身信息。
DBA_USERS:该系统视图用于查看当前库中所有用户,查看需要在当前库下有DBA权限。
USER_USERS:该系统视图用于查看当前登录用户的用户相关信息。
可根据当前权限按需使用对应的系统表及视图,查看用户名、用户ID、锁定状态、有效期等信息,综合示例第二章示例。
五、修改用户
ALTER USER 语句用于修改数据库用户,需确定当前用户是否具有修改用户权限。本章将介绍如何修改用户的用户名、口令、有效期、锁定状态等信息。
5.1 语法格式
5.2 参数说明
user_name
:要修改的用户名;new_user_name
:修改后的新用户名;alias_name
:用户的别名;password
:用户口令字符串;date_time_expr
:用户有效期截止时间的字符串,格式为日期或日期时间,当前时间超过此指定时间即为超过有效期,此时支持对用户进行创建对象、授权操作,但切换与登录该用户时报错,修改有效期大于当前时间后恢复正常;ACCOUNT ( LOCK | UNLOCK )
:修改用户为锁定|解锁状态,若指定为LOCK,则用户修改后即为锁定状态,此时支持对用户进行创建对象、授权操作,但切换与登录该用户时报错,修改为UNLOCK后恢复正常;PASSWORD EXPIRE
:设置用户为密码失效状态,修改后支持对用户进行创建对象、授权操作,但切换与登录该用户时报错,修改密码后恢复正常;QuotasOption
:设置用户在数据库中各种资源上的配额限制;int_value
:设置的数值,取值为非负整数;UNLIMITED
:无限制;CURSOR
:游标配额,限制该用户可创建游标数最大为int_value
值;SESSION
:会话配额,限制该用户可创建连接会话数最大为int_value
值。
注意
RENAME TO
和SET LOGIN
只能单独使用,不能和其他修改参数在同一条SQL语句中使用。
5.3 示例
示例1
修改名为
usr_test
的用户的信息。sqlSQL> ALTER USER usr_test IDENTIFIED BY 'abcPAS135@#' VALID UNTIL '2099-12-31 12:00:00' ACCOUNT UNLOCK QUOTA 5 ON CURSOR QUOTA 3 ON SESSION;
示例2
重命名
usr_test
用户为usr_test_new
。sqlSQL> ALTER USER usr_test RENAME TO usr_test_new;
示例3
修改名为
usr_test_new
的用户登录别名为usr_alias
。sqlSQL> ALTER USER usr_test_new SET LOGIN usr_test_new;
其余参数修改在创建用户示例中已有例举,此处不再重复。
六、删除用户
DROP USER 语句用于删除数据库用户,需确定当前用户是否具有删除用户权限。删除用户操作不可逆,删除前请确认是否不再使用,以及权限依赖等问题。
6.1 语法格式
注意
删除用户后,则所有属主为它的数据库对象均会被删除,所以删除用户前需慎重考虑或对其相关数据库对象进行备份。
6.2 参数解释
user_name
:待删除的用户名;AlterBehavior
:可选关键字RESTRICT
(默认值)或CASCADE
;RESTRICT
:删除用户时,只有在该用户及其对象没有被其他用户或模式对象依赖,才能成功删除。如果用户拥有其他被依赖对象,数据库返回错误,提示无法删除用户;CASCADE
:删除用户时,无论该用户及其对象是否被其他用户或模式对象依赖,都强制删除用户,删除后受依赖关系影响的对象将置为无效状态,同CASCADE CONSTRAINTS
。
6.3 示例
示例
强制删除用户
usr_test_new
。sqlSQL> DROP USER usr_test_new CASCADE;