在之前的博客我们看DM数据的安装和启动,如下:
Linux 平台 达梦 DM7 单实例 安装手册 详细截图版
https://www.cndba.cn/dave/article/3565
linux 平台 达梦DM 7 数据库 启动与关闭
https://www.cndba.cn/dave/article/3566
本篇我们来了解一下DM的用户管理。
1 背景知识说明
在DM数据库中用户管理主要涉及到三块:用户、权限、和角色。
1.1 用户管理
这里涉及到2个概念,用户和模式,在Oracle里也存在这2个概念。 用户是用来连接数据库并进行相关操作的。 而模式是一个用户拥有的所有数据库对象的集合,每个用户都有自己默认的模式,用户默认的模式名和用户名相同。
从DM的官方手册,我们可以看到创建用户的语法:
CREATE USER <用户名> IDENTIFIED <身份验证模式> [PASSWORD_POLICY <口令策略>][<锁定子句>][<存储加密密钥>][<空间限制子句>][<只读标志>][<资源限制子句>][<允许 IP 子句>][<禁止 IP 子句>][<允许时间子句>][<禁止时间子句>][<TABLESPACE 子句>][<INDEX_TABLESPACE 子句>];
这里面的选项很多,但在实际使用中主要涉及如下几点:用户名、密码、资源限制、模式、默认表空间和权限。
另外注意一点,DM7的用户名不区分字母大小写,在DM7中统一保存为大写。
1.1.1 创建用户时的注意事项
1. <用户名>: 指明要创建的用户名称,用户名称最大长度 128 字节;
2. <口令策略>可以为以下值,或其任何组合:
0 无策略;
1 禁止与用户名相同;
2 口令长度不小于 9;
4 至少包含一个大写字母(A-Z);
8 至少包含一个数字(0-9);
16 至少包含一个标点符号(英文输入法状态下,除“ 和空格外的所有符号)。
若为其他数字,则表示以上设置值的和,如 3=1+2,表示同时启用第 1 项和第 2 项策略。当设置为 0 时,表示设置口令没有限制,但总长度不得超过 48 个字节。另外,若不指定该项,则默认采用系统配置文件中 PWD_POLICY 所设值。
3. 空间限制子句用于限制用户使用的最大存储空间,以 M 为单位,取值范围为 1 到1048576,关键字 UNLIMITED 表示无限制;
4. 只读标志表示该登录是否只能对数据库作只读操作,默认为可读写;
5. 完整的资源设置项可以参考官方手册。这里列几个常用的配置项:
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 表空间。
7. 如果没有指定用户默认索引表空间,则 HUGE 表的索引缺省存储在用户的默认表空间中,普通表的索引缺省存储在表的聚集索引所在的表空间中。临时表的索引永远在 TEMP 表空间;
6. 系统预先设置了四个用户,分别为 SYSDBA、SYSAUDITOR、 SYSSSO 和SYS,其中SYSDBA 具备 DBA 角色,SYSAUDITOR 具备 DB_AUDIT_ADMIN 角色,而 SYSSSO具备 DB_POLICY_ADMIN 系统角色;
1.1.2 修改用户的注意事项
1.每个用户均可修改自身的口令,SYSDBA 用户可强制修改所有其他用户的口令(在数据库验证方式下);
2.只有具备 ALTER USER 权限的用户才能修改其身份验证模式、系统角色及资源限制项;
3. 不论 dm.ini 的 DDL_AUTO_COMMIT 设置为自动提交还是非自动提交,ALTER USER 操作都会被自动提交;
4. 修改用户口令时,口令策略应符合创建该用户时指定的口令策略;
5.系统固定用户不能修改其系统角色和资源限制项;
1.1.3 删除用户的注意事项
1.系统自动创建的三个系统用户 SYSDBA、SYSAUDITOR 和 SYSSSO 不能被删除;
2.具有相应的 DROP USER 权限的用户即可进行删除用户操作;
3.执行此语句将导致 DM 删除数据库中该用户建立的所有对象,且不可恢复。
4.如果未使用 CASCADE 选项,若该用户建立了数据库对象 (如表、视图、过程或函数),或其他用户对象引用了该用户的对象,或在该用户的表上存在其它用户建立的视图,DM 将返回错误信息,而不删除此用户;
5.如果使用了 CASCADE 选项,除数据库中该用户及其创建的所有对象被删除外,如果其他用户创建的表引用了该用户表上的主关键字或唯一关键字,或者在该表上创建了视图,DM 还将自动删除相应的引用完整性约束及视图依赖关系;
6.正在使用中的用户可以被删除,删除后重登录或者做操作会报错。
1.2 DM 系统管理员类型
DM 数据库实现了 B1 级安全特性。
- “三权分立”的安全机制,将系统管理员分数据库管理员、数据库安全员和数据库审计员三类。在安装过程中,DM 数据库会预设数据库管理员账号SYSDBA、数据库安全员账号 SYSSSO 和数据库审计员账号 SYSAUDITOR,其缺省口令都与用户名一致。
- “四权分立”的安全机制,将系统管理员分数据库管理员、数据库对象操作员、数据库安全员和数据库审计员四类,在“三权分立”的基础上,新增数据库对象操作员账户SYSDBO,其缺省口令为 SYSDBO。用户需要在安装过程中或者安装完毕后立即修改缺省口令,避免因口令泄漏造成的安全问题。
1. 数据库管理员(DBA)
“三权分立”的安全机制,每个 DM 数据库至少需要一个数据库管理员来管理,负责评估数据库运行所需的软、硬件环境、安装和升级 DM 数据库、配置 DM 数据库参数、创建主要的数据库存储结构(表空间)和对象(如表、视图、索引、角色、用户等)、监控和优化数据库性能、数据导入导出以及数据库的备份和恢复等。
“三权分立”时数据库管理员既可进行系统管理和维护工作,也可对数据内容进行增删查改动作。根据国产数据库军事使用要求,数据库管理员只能进行系统管理和维护工作,不能对数据内容进行增删查改,数据库应用人员则可操作数据内容,而不能管理和维护系统。
“四权分立”的安全机制,在原有“三权分立”基础上调整自主访问控制权限,只具有“三权分立”中 DBA 角色预设的一部分与数据库管理相关的明确的数据库权限,如数据库创建、备份、还原和校验等。
2. 数据库安全员(SSO)
对于很多对安全性要求不高的系统来说,C2 级安全特性已经能够工作得很好,此时不需要考虑通过数据库安全员来进一步加强系统的安全机制。但是在很多大型的系统中,安全性还是至关重要的,有必要由安全员来制定安全策略,强化系统安全机制,此时数据库安全员的主要任务就是制定安全策略,定义新的数据库安全员,设置系统的安全等级、范围和组,并为主、客体定义安全标记,从而全面提升系统安全性。
3.数据库审计员(AUDITOR)
数据库审计员可以设置要审计的对象和操作、定义新的数据库审计员、查看和分析审计记录。通过设置审计,几乎可以跟踪任何人在系统内执行的任何操作,为事后追查提供便利。
4. 数据库对象操作员(DBO)
数据库对象操作员是“四权分立”新增加的一类用户,可以创建数据库对象,并对自己拥有的数据库对象(表、视图、存储过程、序列、包、外部链接)具有所有的对象权限并可以授出与回收,但其无法管理与维护数据库对象。
1.3 权限与角色管理
权限是指执行特定类型SQL命令或访问其他模式对象的权利,它用于限制用户可执行的操作。权限分两种:
- 系统权限:主要指对数据库对象的创建、删除、修改、已经备份恢复等权限
- 对象权限:主要指对数据库对象中的数据的操作权限。
角色是将具有相同权限的用户组织在一起,这一组具有相同权限的用户称为角色。 角色是权限的集合,一个权限可赋予不用的角色。
数据库管理类的预定义角色有三个: DBA、PUBLIC、RESOURCE。
2 操作示例
2.1 查看用户和权限的信息
所有的用户管理操作都可以在DM 的管理工具中进行,我们这里通过视图查看相应的权限信息。
#查看角色信息
#之前说管理类是9个角色,还有其他是审计和安全类的
[dave@www.cndba.cn cndba]$ disql SYSDBA/SYSDBA
Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 10.518(ms)
disql V7.6.0.145-Build(2019.03.20-104220)ENT
#查看所有角色:
SQL> select * from dba_roles;
LINEID 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_POLICY_ADMIN NULL NULL
6 DB_POLICY_OPER NULL NULL
7 DB_POLICY_PUBLIC NULL NULL
8 PUBLIC NULL NULL
9 RESOURCE NULL NULL
10 SYS_ADMIN NULL NULL
10 rows got
#查看所有用户的信息:
SQL> select username,user_id,account_status from dba_users;
LINEID USERNAME USER_ID ACCOUNT_STATUS
---------- ---------- ----------- --------------
1 SYSSSO 50331651 OPEN
2 DMHR 50331748 OPEN
3 SYSDBA 50331649 OPEN
4 SYS 50331648 OPEN
5 SYSAUDITOR 50331650 OPEN
used time: 20.061(ms). Execute id is 173.
SQL>
#查看系统中所有用户对应的角色:
SQL> select * from dba_role_privs;
LINEID GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
---------- ---------- ---------------- ------------ ------------
1 SYSDBA DBA Y NULL
2 DMHR PUBLIC N NULL
3 DMHR RESOURCE N 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_PUBLIC Y NULL
8 SYSAUDITOR DB_AUDIT_OPER Y NULL
9 SYSAUDITOR DB_AUDIT_ADMIN Y NULL
10 SYSDBA SYS_ADMIN N NULL
11 SYSDBA PUBLIC Y NULL
12 SYSDBA RESOURCE Y NULL
12 rows got
#通过dba_sys_privs视图可以查看系统中角色对应的权限。
SQL> select distinct grantee from dba_sys_privs;
LINEID GRANTEE
---------- ----------------
1 DBA
2 RESOURCE
3 PUBLIC
4 DB_AUDIT_ADMIN
5 DB_AUDIT_OPER
6 DB_AUDIT_PUBLIC
7 DB_POLICY_ADMIN
8 DB_POLICY_OPER
9 DB_POLICY_PUBLIC
9 rows got
SQL> select * from dba_sys_privs where grantee='DBA' and rownum<10;
LINEID GRANTEE PRIVILEGE ADMIN_OPTION
---------- ------- ---------------- ------------
1 DBA ALTER DATABASE YES
2 DBA RESTORE DATABASE YES
3 DBA CREATE USER NO
4 DBA ALTER USER NO
5 DBA DROP USER NO
6 DBA CREATE ROLE YES
7 DBA CREATE SCHEMA YES
8 DBA CREATE TABLE YES
9 DBA CREATE VIEW YES
9 rows got
2.2 用户操作
#创建用户:
SQL> create user dave identified by "www.cndba.cn" limit connect_time 3;
executed successfully
used time: 6.336(ms). Execute id is 181.
#对用户授权:
SQL> grant public,resource to dave;
executed successfully
used time: 3.683(ms). Execute id is 182.
SQL>
#登陆dave用户:
SQL> conn dave/"www.cndba.cn"
Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 11.017(ms)
SQL>
#查看当前用户:
SQL> select username from user_users;
LINEID USERNAME
---------- --------
1 DAVE
used time: 17.873(ms). Execute id is 183.
SQL> select user();
LINEID USER()
---------- ------
1 DAVE
used time: 1.353(ms). Execute id is 185.
SQL>
SQL> create table dave as select * from sysobjects;
executed successfully
used time: 16.632(ms). Execute id is 186.
SQL> select count(1) from dave;
LINEID COUNT(1)
---------- --------------------
1 1505
used time: 1.460(ms). Execute id is 187.
SQL>
#修改用户会话空闲期为无限制,最大连接数为 10。
SQL> conn SYSDBA/SYSDBA
Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 7.369(ms)
SQL> alter user dave limit session_per_user 10, connect_idle_time unlimited;
executed successfully
used time: 8.256(ms). Execute id is 188.
#可以通过sysusers 数据字典查看这些资源的修改值:
SQL> desc sysusers;
LINEID NAME TYPE$ NULLABLE
---------- --------------- ------------ --------
1 ID INTEGER N
2 PASSWORD VARCHAR(128) N
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
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
23 ENCRYPT_KEY VARCHAR(256) Y
23 rows got
used time: 32.360(ms). Execute id is 189.
#删除用户:
SQL> drop user dave cascade;
executed successfully
used time: 41.465(ms). Execute id is 200.
SQL>
SQL> select username from dba_users;
LINEID USERNAME
---------- ----------
1 SYSSSO
2 DMHR
3 SYSDBA
4 SYS
5 SYSAUDITOR
used time: 12.434(ms). Execute id is 203.
SQL>
用户管理的基本内容就就这么多,最后补充一句,以上所有操作都可以在DM的管理器中进行操作。
版权声明:本文为博主原创文章,未经博主允许不得转载。