在进行达梦数据库用户与模式管理时,我们必须要明确达梦数据库用户与模式的定义及其之间的关系:
用户(USER):用户是用来连接数据库并进行相关操作的。
模式(SCHEMA):模式是数据库对象的集合,模式是数据库的逻辑结构。
在达梦数据库中,用户(USER)和模式(SCHEMA)是一对多的关系,即一个用户拥有至少一个及以上的模式,而一个模式只能属于一个用户。达梦数据库用户与模式的对应关系可以通过如下方式查看。
SQL> select a.name as username, b.name as schenma from sysobjects a inner join sysobjects b on a.id = b.pid where b.subtype$ is null order by username desc;
行号 USERNAME SCHENMA
---------- ---------- ----------
1 SYSSSO SYSSSO
2 SYSDBA SYSJOB
3 SYSDBA PERSON
4 SYSDBA OTHER
5 SYSDBA SYSDBA
6 SYSDBA PRODUCTION
7 SYSDBA PURCHASING
8 SYSDBA RESOURCES
9 SYSDBA SALES
10 SYSAUDITOR SYSAUDITOR
11 SYS CTISYS
行号 USERNAME SCHENMA
---------- -------- -------
12 SYS SYS
13 DMHR DMHR
13 rows got
已用时间: 2.138(毫秒). 执行号:96.
SQL>
1、创建用户
达梦数据库创建用户的命令是 CREATE USER,创建用户所涉及的内容包括为用户指定用户名、认证模式、口令、口令策略、空间限制、只读属性以及资源限制。其中用户名是代表用户账号的标识符,长度为 1~128 个字符。用户名可以用双引号括起来,也可以不用,但如果用户名以数字开头,必须用双引号括起来。在创建用户前,需要提前规划并创建相关的表空间。
例如:创建用户DM8DBA,默认表空间为main,默认索引表空间为main,用户名密码为Dm8dba_123,用户密码策略为2,连续登陆失败3次后,用户自动锁定1分钟,用户密码过期宽限天数为10天。
SQL> create user DM8DBA identified by Dm8dba_123 password_policy 2 limit failed_login_attemps 3, password_lock_time 1, password_grace_time 10 default tablespace main default index tablespace main;
create user DM8DBA identified by Dm8dba_123 password_policy 2 limit failed_login_attemps 3, password_lock_time 1, password_grace_time 10 default tablespace main default index tablespace main;
第1 行附近出现错误[-5630]:非安全版本不能进行此操作.
已用时间: 2.998(毫秒). 执行号:0.
SQL> create user DM8DBA identified by Dm8dba_123 limit failed_login_attemps 3, password_lock_time 1, password_grace_time 10 default tablespace main default index tablespace main;
操作已执行
已用时间: 9.550(毫秒). 执行号:101.
SQL>
注意:如果要在创建用户时指定口令策略,必须使用达梦数据库安全版本,此处为非安全版本,是无法使用口令策略的,达梦数据库用户口令最长为 48 字节,创建用户语句中的 PASSWORD POLICY 子句用来指定该用户的口令策略,系统支持的口令策略有:
⚫ 0 无策略
⚫ 1 禁止与用户名相同
⚫ 2 口令长度不小于 9
⚫ 4 至少包含一个大写字母(A-Z)
⚫ 8 至少包含一个数字(0-9)
⚫ 16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)
口令策略可单独应用,也可组合应用。组合应用时,如需要应用策略 2 和
4,则设置口令策略为 2+4=6 即可。若在创建用户时没有使用
PASSWORD POLICY 子句指定用户的口令策略,则使用系统的默认口令策略。系统管理员可通过SELECT
* FROM V$PARAMETER WHERE NAME=’PWD_POLICY’;查询
PWD_POLICY 的当前值。
2、用户权限授予与回收
SQL> grant resource,public to dm8dba;
操作已执行
已用时间: 5.800(毫秒). 执行号:109.
SQL> revoke resource,public from dm8dba;
操作已执行
已用时间: 5.441(毫秒). 执行号:110.
SQL>
一般情况下,达梦数据库用户授予resource,public权限就可以了,需要其他权限可以联系DBA进行授予。
3、修改用户属性
例如:修改用户DM8DBA的默认索引表空间为dmhr。
SQL> alter user dm8dba default index tablespace dmhr;
操作已执行
已用时间: 7.522(毫秒). 执行号:112.
SQL>
达梦数据库修改用户属性使用alter user语句,创建用户和修改用户的详细语法可参考达梦官方安全管理手册。
4、查询用户信息
例如:查看DM8DBA用户的相关信息。
SQL> select * from dba_users where username = 'DM8DBA';
行号 USERNAME USER_ID PASSWORD ACCOUNT_STATUS LOCK_DATE
---------- -------- ----------- -------- -------------- ---------
EXPIRY_DATE
----------------------------------------------------------------------------------------------------
DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
------------------ --------------------
CREATED
----------------------------------------------------------------------------------------------------
PROFILE INITIAL_RSRC_CONSUMER_GROUP EXTERNAL_NAME PASSWORD_VERSIONS
------------------------------ --------------------------- ------------- -----------------
EDITIONS_ENABLED AUTHENTICATION_TYPE
---------------- -------------------
NOWDATE
----------------------------------------------------------------------------------------------------
1 DM8DBA 50331749 NULL OPEN NULL
NULL
MAIN TEMP
2021-12-30 21:47:08.580000
E:\dmdbms\data\DAMENG\MAIN.DBF NULL NULL 2
Y NDCT_DB_AUTHENT
2021-12-30 22:05:57
已用时间: 2.109(毫秒). 执行号:113.
SQL>
5、创建模式
例如:创建模式DM8DBA_SCH,属于DM8DBA用户。
SQL> create schema dm8dba_sch authorization dm8dba
2 /
操作已执行
已用时间: 1.185(毫秒). 执行号:115.
SQL>
这时,我们再来看看,DM8DBA用户下的模式信息。
SQL> select a.name as username, b.name as schenma from sysobjects a inner join sysobjects b on a.id = b.pid where b.subtype$ is null and a.name = 'DM8DBA';
行号 USERNAME SCHENMA
---------- -------- ----------
1 DM8DBA DM8DBA
2 DM8DBA DM8DBA_SCH
已用时间: 5.659(毫秒). 执行号:117.
SQL>
可以看到,DM8DBA用户有两个模式:DM8DBA和DM8DBA_SCM,模式DM8DBA是在创建用户时自动创建的,且与DM8DBA用户是同名的,这是达梦数据库默认的。
注意:命令行创建模式时,以/结束。
6、删除用户和模式
例如:删除模式DM8DBA_SCH,删除用户DM8DBA。
SQL> drop schema dm8dba_sch;
操作已执行
已用时间: 51.667(毫秒). 执行号:118.
SQL> drop user dm8dba;
操作已执行
已用时间: 52.364(毫秒). 执行号:119.
SQL>
SQL> select a.name as username, b.name as schenma from sysobjects a inner join sysobjects b on a.id = b.pid where b.subtype$ is null and a.name = 'DM8DBA';
未选定行
已用时间: 1.451(毫秒). 执行号:120.
SQL>
注意:在删除用户时,会删除用户底下所有的模式,所以在达梦数据库中,如果一个用户有多个模式,在删除一个模式时,千万注意不能使用drop user的方式,要用drop schema删除。