在DM数据库中用户管理主要涉及到三块:用户、权限、和角色。这里涉及到2个概念,用户和模式,在Oracle里也存在这2个概念。 用户是用来连接数据库并进行相关操作的。 而模式是一个用户拥有的所有数据库对象的集合,每个用户都有自己默认的模式,用户默认的模式名和用户名相同。
从DM的官方手册,我们可以看到创建用户的语法:
CREATE USER <用户名> IDENTIFIED <身份验证模式> [PASSWORD_POLICY <口令策略>][<锁定子句>][<存储加密密钥>][<空间限制子句>][<只读标志>][<资源限制子句>][<允许 IP 子句>][<禁止 IP 子句>][<允许时间子句>][<禁止时间子句>][<TABLESPACE 子句>][<INDEX_TABLESPACE 子句>];
这里面的选项很多,但在实际使用中主要涉及如下几点:用户名、密码、资源限制、模式、默认表空间和权限。
-
<用户名>
指明要创建的用户名称,用户名称最大长度 128 字节; -
<口令策略>
可以为以下值,或其任何组合:
0 无策略;
1 禁止与用户名相同;
2 口令长度不小于 9;
4 至少包含一个大写字母(A-Z);
8 至少包含一个数字(0-9);
16 至少包含一个标点符号(英文输入法状态下,除“ 和空格外的所有符号)。
若为其他数字,则表示以上设置值的和,如 3=1+2,表示同时启用第 1 项和第 2 项策略。当设置为 0 时,表示设置口令没有限制,但总长度不得超过 48 个字节。另外,若不指定该项,则默认采用系统配置文件中 PWD_POLICY 所设值。 -
空间限制子句用于限制用户使用的最大存储空间,以 M 为单位,取值范围为 1 到1048576,关键字 UNLIMITED 表示无限制;
-
只读标志表示该登录是否只能对数据库作只读操作,默认为可读写;
-
完整的资源设置项可以参考官方手册。这里列几个常用的配置项:
SESSION_PER_USER:实例中用户可以同时拥有的会话数量,最大为32768,默认值是OS提供的最大值。
CONNECT_IDLE_TIME: 会话最大空闲时间(单位:1 分钟),默认为无限制。
FAILED_LOGIN_ATTEMPS:将引起一个账户被锁定的连续注册失败的次数,设置范围1到 100,默认为3。
PASSWORD_LOCK_TIME:如果超过FAILED_LOGIN_ATTEMPS 设置值, 账户将被锁定的分钟数。最大为1440(1 天),默认为1.
PASSWORD_LIFE_TIME: 口令在其终止前可以使用的天数,设置范围1到 365,默认为无限制。
6.如果没有指定用户默认表空间,则系统指定 MAIN 表空间为用户的默认表空间;用户默认表空间和索引默认表空间不能使用SYSTEM、RLOG、ROLL、TEMP 表空间。 -
如果没有指定用户默认索引表空间,则 HUGE 表的索引缺省存储在用户的默认表空间中,普通表的索引缺省存储在表的聚集索引所在的表空间中。临时表的索引永远在 TEMP 表空间;
-
系统预先设置了四个用户,分别为 SYSDBA、SYSAUDITOR、 SYSSSO 和SYS,其中SYSDBA 具备 DBA 角色,SYSAUDITOR 具备 DB_AUDIT_ADMIN 角色,而 SYSSSO具备 DB_POLICY_ADMIN 系统角色;
-
权限是指执行特定类型SQL命令或访问其他模式对象的权利,它用于限制用户可执行的操作。权限分两种:
- 系统权限:主要指对数据库对象的创建、删除、修改、已经备份恢复等权限
- 对象权限:主要指对数据库对象中的数据的操作权限。
角色是将具有相同权限的用户组织在一起,这一组具有相同权限的用户称为角色。 角色是权限的集合,一个权限可赋予不用的角色。
数据库管理类的预定义角色有三个: DBA、PUBLIC、RESOURCE。
用户类型
DM 数据库实现了 B1 级安全特性。
- “三权分立”的安全机制,将系统管理员分数据库管理员、数据库安全员和数据库审计员三类。在安装过程中,DM 数据库会预设数据库管理员账号SYSDBA、数据库安全员账号 SYSSSO 和数据库审计员账号 SYSAUDITOR,其缺省口令都与用户名一致。
- “四权分立”的安全机制,将系统管理员分数据库管理员、数据库对象操作员、数据库安全员和数据库审计员四类,在“三权分立”的基础上,新增数据库对象操作员账户SYSDBO,其缺省口令为 SYSDBO。用户需要在安装过程中或者安装完毕后立即修改缺省口令,避免因口令泄漏造成的安全问题。
数据库管理员
“三权分立”的安全机制,每个 DM 数据库至少需要一个数据库管理员来管理,负责评估数据库运行所需的软、硬件环境、安装和升级 DM 数据库、配置 DM 数据库参数、创建主要的数据库存储结构(表空间)和对象(如表、视图、索引、角色、用户等)、监控和优化数据库性能、数据导入导出以及数据库的备份和恢复等。
“三权分立”时数据库管理员既可进行系统管理和维护工作,也可对数据内容进行增删查改动作。根据国产数据库军事使用要求,数据库管理员只能进行系统管理和维护工作,不能对数据内容进行增删查改,数据库应用人员则可操作数据内容,而不能管理和维护系统。
“四权分立”的安全机制,在原有“三权分立”基础上调整自主访问控制权限,只具有“三权分立”中 DBA 角色预设的一部分与数据库管理相关的明确的数据库权限,如数据库创建、备份、还原和校验等。
数据库安全员
对于很多对安全性要求不高的系统来说,C2 级安全特性已经能够工作得很好,此时不需要考虑通过数据库安全员来进一步加强系统的安全机制。但是在很多大型的系统中,安全性还是至关重要的,有必要由安全员来制定安全策略,强化系统安全机制,此时数据库安全员的主要任务就是制定安全策略,定义新的数据库安全员,设置系统的安全等级、范围和组,并为主、客体定义安全标记,从而全面提升系统安全性。
数据库审计员
数据库审计员可以设置要审计的对象和操作、定义新的数据库审计员、查看和分析审计记录。通过设置审计,几乎可以跟踪任何人在系统内执行的任何操作,为事后追查提供便利。
数据库对象操作员
数据库对象操作员是“四权分立”新增加的一类用户,可以创建数据库对象,并对自己拥有的数据库对象(表、视图、存储过程、序列、包、外部链接)具有所有的对象权限并可以授出与回收,但其无法管理与维护数据库对象。
查看用户
所有的用户管理操作都可以在DM 的管理工具中进行,我们这里通过视图查看相应的权限信息。
dmdba@yankai-linux:/dm8/bin$ ./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 15.687(ms)
disql V8
#查看所有角色:
SQL> select * from dba_roles;
行号 ROLE PASSWORD_REQUIRED AUTHENTICATION_TYPE
---------- ---------------- ----------------- -------------------
1 DBA NULL NULL
2 DB_AUDIT_ADMIN NULL NULL
3 DB_AUDIT_OPER NULL NULL
4 DB_AUDIT_PUBLIC NULL NULL
5 DB_AUDIT_SOI NULL NULL
6 DB_AUDIT_SVI NULL NULL
7 DB_AUDIT_VTI NULL NULL
8 DB_POLICY_ADMIN NULL NULL
9 DB_POLICY_OPER NULL NULL
10 DB_POLICY_PUBLIC NULL NULL
11 DB_POLICY_SOI NULL NULL
行号 ROLE PASSWORD_REQUIRED AUTHENTICATION_TYPE
---------- ------------- ----------------- -------------------
12 DB_POLICY_SVI NULL NULL
13 DB_POLICY_VTI NULL NULL
14 PUBLIC NULL NULL
15 RESOURCE NULL NULL
16 SOI NULL NULL
17 SVI NULL NULL
18 SYS_ADMIN NULL NULL
19 VTI NULL NULL
19 rows got
已用时间: 154.283(毫秒). 执行号:900.
#查看所有用户的信息:
SQL> select username,user_id,account_status from dba_users;
行号 USERNAME USER_ID ACCOUNT_STATUS
---------- ---------- ----------- --------------
1 SYS 50331648 OPEN
2 SYSDBA 50331649 OPEN
3 SYSAUDITOR 50331650 OPEN
4 SYSSSO 50331651 OPEN
已用时间: 668.414(毫秒). 执行号:901.
#查看系统中所有用户对应的角色:
SQL> select * from dba_role_privs;
行号 GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
---------- ---------- ---------------- ------------ ------------
1 SYSDBA DBA Y NULL
2 DBA VTI Y NULL
3 SYSSSO DB_POLICY_SOI Y NULL
4 SYSSSO DB_POLICY_PUBLIC Y NULL
5 SYSSSO DB_POLICY_OPER Y NULL
6 SYSSSO DB_POLICY_ADMIN Y NULL
7 SYSAUDITOR DB_AUDIT_SOI Y NULL
8 SYSAUDITOR DB_AUDIT_PUBLIC Y NULL
9 SYSAUDITOR DB_AUDIT_OPER Y NULL
10 SYSAUDITOR DB_AUDIT_ADMIN Y NULL
11 SYSDBA SOI Y NULL
行号 GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
---------- ---------------- ------------- ------------ ------------
12 SYSDBA SYS_ADMIN N NULL
13 SYSDBA PUBLIC Y NULL
14 SYSDBA RESOURCE Y NULL
15 PUBLIC SVI N NULL
16 DB_AUDIT_ADMIN DB_AUDIT_VTI Y NULL
17 DB_AUDIT_PUBLIC DB_AUDIT_SVI N NULL
18 DB_POLICY_PUBLIC DB_POLICY_SVI N NULL
19 DB_POLICY_ADMIN DB_POLICY_VTI Y NULL
19 rows got
已用时间: 151.714(毫秒). 执行号:902.
#通过dba_sys_privs视图可以查看系统中角色对应的权限。
SQL> select distinct grantee from dba_sys_privs;
行号 GRANTEE
---------- ---------------
1 SYS
2 SYSDBA
3 SYSAUDITOR
4 SYSSSO
5 DBA
6 RESOURCE
7 PUBLIC
8 DB_AUDIT_ADMIN
9 DB_AUDIT_OPER
10 DB_AUDIT_PUBLIC
11 DB_POLICY_ADMIN
行号 GRANTEE
---------- ----------------
12 DB_POLICY_OPER
13 DB_POLICY_PUBLIC
13 rows got
已用时间: 15.624(毫秒). 执行号:903.
用户操作
dmdba@yankai-linux:/dm8/bin$ ./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 3.482(ms)
disql V8
#创建用户:
SQL> create user test identified by "www.cndba.cn" limit connect_time 3;
操作已执行
已用时间: 500.453(毫秒). 执行号:1000.
#对用户授权:
SQL> grant public,resource to test;
操作已执行
已用时间: 125.277(毫秒). 执行号:1001.
#登录test用户
SQL> conn test/"www.cndba.cn"
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 4.374(ms)
#查看当前用户:
SQL> select username from user_users;
行号 USERNAME
---------- --------
1 TEST
已用时间: 00:00:01.256. 执行号:1100.
SQL> select user();
行号 USER()
---------- ------
1 TEST
已用时间: 27.566(毫秒). 执行号:1101.
dmdba@yankai-linux:/dm8/bin$ ./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 6.370(ms)
disql V8
SQL> create table dave as select * from sysobjects;
操作已执行
已用时间: 214.930(毫秒). 执行号:1200.
SQL> select count(1) from dave;
行号 COUNT(1)
---------- --------------------
1 915
已用时间: 103.765(毫秒). 执行号:1201.
#可以通过sysusers 数据字典查看这些资源的修改值:
SQL> desc sysusers;
行号 NAME TYPE$ NULLABLE
---------- -------------- ------------ --------
1 ID INTEGER N
2 PASSWORD VARCHAR(512) Y
3 AUTHENT_TYPE INTEGER N
4 SESS_PER_USER INTEGER N
5 CONN_IDLE_TIME INTEGER N
6 FAILED_NUM INTEGER N
7 LIFE_TIME INTEGER N
8 REUSE_TIME INTEGER N
9 REUSE_MAX INTEGER N
10 LOCK_TIME INTEGER N
11 GRACE_TIME INTEGER N
行号 NAME TYPE$ NULLABLE
---------- --------------- ------------ --------
12 LOCKED_STATUS SMALLINT N
13 LASTEST_LOCKED DATETIME(0) Y
14 PWD_POLICY INTEGER Y
15 RN_FLAG INTEGER Y
16 ALLOW_ADDR VARCHAR(500) Y
17 NOT_ALLOW_ADDR VARCHAR(500) Y
18 ALLOW_DT VARCHAR(500) Y
19 NOT_ALLOW_DT VARCHAR(500) Y
20 LAST_LOGIN_DTID VARCHAR(128) Y
21 LAST_LOGIN_IP VARCHAR(128) Y
22 FAILED_ATTEMPS INTEGER Y
行号 NAME TYPE$ NULLABLE
---------- ----------- ------------ --------
23 ENCRYPT_KEY VARCHAR(256) Y
23 rows got
已用时间: 315.676(毫秒). 执行号:1202.
#删除用户:
SQL> drop user test cascade;
操作已执行
已用时间: 00:00:01.058. 执行号:1203.
SQL> select username from dba_users;
行号 USERNAME
---------- ----------
1 SYS
2 SYSDBA
3 SYSAUDITOR
4 SYSSSO
已用时间: 17.442(毫秒). 执行号:1204.